0

我有一个 WCF 服务 (service1)。我在托管应用程序(简单的 .NET 应用程序)中托管此服务的几个实例。我在 Windows 服务中托管了另一个 WCF 服务 (service2)。当运行我的应用程序时,所有 service1 实例都连接到 service2 并且一切正常。但是,当 service2 尝试连接到 service1 的任何实例时,会出现异常“net.tcp://localhost:8732/TestComponent_6a4009df-cc68-4cd9-9414-16737c734548 上没有可以接受消息的端点监听。这通常是由不正确的地址或 SOAP 操作引起。有关更多详细信息,请参阅 InnerException(如果存在)。

所有 services1 实例都有唯一的地址(参见 uri 中的 guid),但服务合同和绑定类型相似。我使用打开端口共享的 netTCP 绑定。

有什么建议吗?

注意:当我在托管应用程序中托管唯一一个 service1 实例时,一切正常。我可以运行我的应用程序的多个实例,也没有错误。只有当我在一个应用程序中托管多个 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 回答