我有一个 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();
}