无法连接到托管应用中托管的多个 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();
}
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,则无法在同一端口上托管多个实例。