2

複数の Wcf サービス クラスを持つことは可能ですか。2 つのコントラクト インターフェイスがあり、2 つの異なるサービス クラスに実装したいからです。出来ますか?

4

2 に答える 2

1

IService1 と IService2 という 2 つのコントラクトがある場合、次の 2 つのオプションがあります。

  • 2 つのサービス コントラクトは両方とも、IService1 と IServe2 のすべてのメソッドを実装する 1 つのサービスによって実装されます。次に、構成ファイルは次のようになります。

    <services>
        <service name="MyNamespace.Service">
            <host>
                <baseAddresses>
                    <add baseAddress="http:localhost:8080" />
                </baseAddresses>
            </host>
            <endpoint address="Service1" binding="basicHttpBinding" contract="MyNameSpace.IService1" />
            <endpoint address="Service2" binding="basicHttpBinding" contract="MyNameSpace.IService2" />
        </service>
    </services>
  • 各コントラクトは個別のサービスによって実装されます。たとえば、Service1 と Service2 の場合、構成は次のようになります。

    <services>
        <service name="MyNamespace.Service1">
            <host>
                <baseAddresses>
                    <add baseAddress="http:localhost:8081" />
                </baseAddresses>
            </host>
            <endpoint address="Service1" binding="basicHttpBinding" contract="MyNameSpace.IService1" />
        </service>
        <service name="MyNamespace.Service2">
            <host>
                <baseAddresses>
                    <add baseAddress="http:localhost:8082" />
                </baseAddresses>
            </host>
            <endpoint address="Service2" binding="basicHttpBinding" contract="MyNameSpace.IService2" />
        </service>
    </services>
于 2012-11-27T13:13:12.547 に答える
0

はい。ただし、これらのサービスを公開することは別のことです。1 つのアドレスで 2 つのコントラクトを公開することはできません (ただし、それらを 1 つのインターフェイスでラップする場合を除きますが、お勧めしません)。web.config で 2 つのサービス コントラクトに異なるエンドポイントを指定する必要があります。例えば、

 <services>
  <service name="TwoContracts.Service1">
    <endpoint address="" binding="basicHttpBinding" contract="TwoContracts.IService1">
    </endpoint>
    <host>
      <baseAddresses>
        <add baseAddress="http://yoururl.com/TwoContracts/Service1" />
      </baseAddresses>
    </host>
  </service>
  <service name="TwoContracts.Service2">
    <host>
      <baseAddresses>
        <add baseAddress="http://yoururl.com/TwoContracts/Service2" />
      </baseAddresses>
    </host>
    <endpoint address="" binding="basicHttpBinding"
      contract="TwoContracts.IService2" />
  </service>
</services>
于 2012-11-27T12:46:37.663 に答える