クライアントとサーバーの両方が 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 であることに注意してください。