0

クライアントとサーバーの両方が Windows フォームであるソリューションで、NetTcpBinding と共に WCF を使用しています。このサービスは、そのうちの 1 つによってホストされています。私はVS.2012を使用しています。

サーバー側には、(関連する) いくつかのサービス コントラクトがあり、そのすべてが 1 つのサービス クラスに実装されています。このような:

public class MyService : IServiceA, IServiceB
{
}

これらは net.tcp://localhost:4545/control/ 経由でアクセスできる必要があり、次のサービス アドレスにつながります。

 IServiceA (endpoint alphaEP) : net.tcp://localhost:4545/control/ASvc/
 IServiceB (endpoint betaEP)  : net.tcp://localhost:4545/control/BSvc/

そして、svcutil.exe を使用してクライアントのものを生成すると、インターフェイスごとに 1 つずつ、2 つのサービス クライアント クラスが生成されることがわかります。そのため、ServiceBClient を使用すると、契約「IServiceB」で「betaEP」を見つけることができなかったことを示す例外が生成されます。 ' app.config に同じバインド構成があり、両方のエンドポイントが定義されている場合でも

  <bindings>
    <netTcpBinding>
      <binding name="alphaEP">
        <reliableSession enabled="true" />
        <security mode="None" />
      </binding>
      <binding name="betaEP">
        <reliableSession enabled="true" />
        <security mode="None" />
      </binding>
    </netTcpBinding>
  </bindings>

この

  <client>
    <endpoint address="net.tcp://localhost:4545/control/ASvc"
        binding="netTcpBinding" bindingConfiguration="alphaEP"
        contract="CodeDom.IServiceA" name="alphaEP">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="net.tcp://localhost:4545/control/BSvc"
            binding="netTcpBinding" bindingConfiguration="betaEP" contract="CodeDom.IServiceB"
            name="betaEP">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
  </client>

このクライアント app.config がサーバー構成に基づいて svcutil.exe によって生成された場合、エンドポイントが見つからないのはなぜですか?

1 つのクライアント クラスではなく 2 つのクライアント クラスを生成するのはなぜですか? それが問題の原因になりますか?公開する関連サービスが複数あり、その上で複数のポートを占有したくありません。これは Net TCP Binding であることに注意してください。

4

0 に答える 0