0

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();
}
4

1 に答える 1

0
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();
}

このコード セクションから、すべての service1 インスタンスが同じポートとアドレスを使用しているように見えます。IIS を使用していない場合、同じポートで複数のインスタンスをホストすることはできません。

于 2012-05-14T07:02:56.067 に答える