WCF サービス (service1) があります。このサービスのいくつかのインスタンスをマネージド アプリケーション (単純な .NET アプリケーション) でホストしています。また、Windows サービスでホストされている別の WCF サービス (service2) があります。アプリケーションを実行すると、すべての service1 インスタンスが service2 に接続され、すべてがうまくいきます。しかし、service2 が service1 の任意のインスタンスに接続しようとすると、例外が発生します。不正なアドレスまたは SOAP アクションが原因です。詳細については、InnerException が存在する場合は参照してください。"
すべての services1 インスタンスには一意のアドレスがありますが (URI の GUID を参照)、同様のサービス コントラクトとバインディング タイプがあります。ポート共有をオンにして netTCP バインディングを使用しています。
何かアドバイスはありますか?
注: マネージド アプリケーションで service1 インスタンスを 1 つだけホストすると、すべてうまくいきます。アプリの複数のインスタンスを実行できますが、エラーもありません。そして、1 つのアプリで複数の service1 インスタンスをホストした場合にのみ、問題が発生します。
いくつかのコードがあります:
Service1 インスタンスの作成:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Component = new TestComponent("net.tcp://localhost:8732/TestComponent", Component_OnMessageReceivedEvent);
Component.JoinServer();
Component2 = new TestComponent("net.tcp://localhost:8732/TestComponent", Component_OnMessageReceivedEvent);
//guids is added to addresses in TestComponent constructor
Component2.JoinServer();
}
コンポーネント内での動作:
public void JoinServer()
{
this.StartComponentHosting();
if (ServerClient != null)
{
ServerClient.Close();
ServerClient = null;
}
ServerClient = new ServerClient();
ServerClient.Open(); //conneting to service2
ServerClient.JoinComponent(this.ProviderInfo); //calling some method on service2
}
private void StartComponentHosting()
{
if (ComponentHost != null)
{
ComponentHost.Close();
}
ComponentHost = new ServiceHost(this);
var portsharingBinding = new NetTcpBinding("NetTCPBindingConfig") { PortSharingEnabled = true };
ComponentHost.AddServiceEndpoint(typeof(IComponent), portsharingBinding, this.Address);
ComponentHost.Open();
}