31

Visual Studio 2010 で C# を使用して非常に基本的な WCF サービスを作成しています//localhost:49815/Service1.svc/methodName(parameterValue)

これが私のコードの本質です。

インターフェース:

using ...
namespace WcfService1{   
    [ServiceContract]
    public interface IService1{
        [OperationContract]
        [WebGet]
        string echoWithGet(string s);
        [OperationContract]
        [WebInvoke]
        string echoWithPost(string s);
    }
}

方法:

 public string echoWithGet(string s ){
            return "Get: "+s;
        }

 public string echoWithPost(string s){
            return "Post: " + s;
        }
4

3 に答える 3

48

はい、 URL 構文が間違っていても、サービスが適切に構成されていれば、ブラウザーでこれらのメソッドを呼び出すことができます。

ブラウザーから WCF メソッドを呼び出すには、次の 2 つのことを行う必要があります。

  • あなたが行ったメソッドの属性を使用[WebGet]します。[WebInvoke]
  • webHttpBindingサービスのエンドポイントに を使用し、webHttp動作を有効にします。サンプル構成については、http://weblogs.asp.net/kiyoshi/archive/2008/10/08/wcf-using-webhttpbinding-for-rest-services.aspxを参照してください。ただし、関連する部分は次のとおりです。

     <service> 
        <endpoint behaviorConfiguration="webBehavior" binding="webHttpBinding" contract="MyServiceContract" /> 
    </service> 
    
    <endpointBehaviors> 
        <behavior name="webBehavior"> 
            <webHttp /> 
        </behavior> 
    </endpointBehaviors> 
    

それが完了すると、WCF は URL 要求のリッスンを開始し、それらを適切な Web メソッドにルーティングします。URL を「よりクリーン」にしたい場合は、URL セグメントをメソッド パラメータにマップするWebGetまたは属性に URL テンプレートを設定できますが、これはオプションです。WebPostそれ以外の場合は、パラメーター区切り文字を使用して、他の URL にパラメーターを渡すのと同じ方法でパラメーターを渡します。

http://localhost:49815/MyService.svc/methodName?parameterName=value

Web 呼び出しメソッドのデフォルトは POST であることに注意してください。技術的にはブラウザからこれらを行うことができますが、それははるかに困難です (ローカルの HTML フォームを作成するか、Javascript コンソールを使用するか、または同様のものを使用する必要があります) がWebGet、正しい URL を要求するだけでメソッドを呼び出すことができます。

また、メソッドが文字列よりも複雑なものを返す場合、WCF はそれを JSON としてシリアル化しようとします。結果のページを表示するには、「ソースを表示」する必要がある場合があります。

于 2013-09-24T19:12:22.563 に答える
5

これはあなたの質問への回答にはなりませんが、サービスを RESTful (または REST ライク) にすることで、あなたの生活はずっと楽になります。WCF でそれを行うことができますが、ASP.NET Web APIを確認することを強くお勧めします。

NancyServiceStackなど、RESTful サービスを作成するために使用できる他の代替手段もあります。

于 2013-09-24T18:41:49.913 に答える