无法连接到托管应用中托管的多个 WCF 服务

本文关键字:服务 WCF 应用 连接 | 更新日期: 2023-09-27 18:33:59

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

所有 service1 实例都具有唯一的地址(请参阅 uri 中的 guid(,但类似的服务协定和绑定类型。我在打开端口共享的情况下使用网络TCP绑定。

有什么建议吗?

注意:当我在托管应用程序中托管唯一的一个 service1 实例时,一切正常。我可以运行我的应用程序的多个实例,也没有错误。只有当我在一个应用程序中托管多个 service1 实例时,我才会遇到问题。

有一些代码:

服务1 实例创建:

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

无法连接到托管应用中托管的多个 WCF 服务

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,则无法在同一端口上托管多个实例。