C#と諸々

C#がメインで他もまぁ諸々なブログです
おかしなこと書いてたら指摘してくれると嬉しいです(´・∀・`)
つーかコメント欲しい(´・ω・`)

2007/02/18 23:29
WCFでは、エンドポイントを複数用意することによって、一つのコントラクトを複数のバインディングに対応させたりすることが可能です。

[ エンドポイントを複数用意する方法 ]
エンドポイントを複数用意するには、WCFサービスのコンフィギュレーションに endpoint セクションを複数用意し、address 属性にそれぞれ重複しないように適当な値を設定します。また、必須ではありませんが、各 endpoint セクションの name 属性にてエンドポイントのコンフィギュレーション名を設定しておくと、WCF クライアントアプリケーションのコンフィギュレーションにもそのコンフィギュレーション名が反映され、クライアントで利用しやすくなります。 ( 用意しない場合、クライアントのコンフィギュレーションでは、 "バインディングセット名_コントラクト名" という命名規則に、連番が振られた名称が設定されます。 )

エンドポイントを複数用意する場合、WCF クライアントアプリケーションのサービスプロキシクラスでは、どのエンドポイントを利用するかを明示的に指定する必要があります。これは、サービスプロキ シクラスのコンストラクタで、エンドポイントコンフィギュレーション名を指定します。


[ 例 ]
例えば、一つのWCFサービスでSOAP1.1とSOAP1.2の両方に対応させたい場合、以下のように設定します。

<services>
    <service behaviorConfiguration="MyServiceBehavior" name="MyService">
        <endpoint name="MyServiceEndpointSoap1.2" binding="customBinding" bindingConfiguration="MyServiceBindingSoap1.2" contract="IMyService" address="soap1.2" />
        <endpoint name="MyServiceEndpointSoap1.1" binding="customBinding" bindingConfiguration="MyServiceBindingSoap1.1" contract="IMyService" address="soap1.1" />
    </service>
</services>
<bindings>
    <customBinding>
        <binding name="MyServiceBindingSoap1.2" >
            <mtomMessageEncoding messageVersion="Soap12" />
            <httpTransport />
        </binding>
        <binding name="MyServiceBindingSoap1.1" >
            <mtomMessageEncoding messageVersion="Soap11" />
            <httpTransport />
        </binding>
    </customBinding>
</bindings>

このWCFサービスのクライアントアプリケーションでは、以下のように、どのエンドポイントを利用するかを明示的に指定する必要があります。

// SOAP1.2 が適用されるエンドポイントを利用する場合
using (MyServiceClient client = new MyServiceClient("MyServiceEndpointSoap1.2"))
{
    client.MyOperation1();
}


[ おまけ ]
セルフホストで設定をハードコーディングする場合の例を以下に示します。
スポンサーサイト



タグ: .NET C# WCF