我有一個WCF服務(service1)。我在託管應用程序中託管了該服務的幾個實例(簡單的.NET應用程序)。我有另一個WCF服務(service2)在Windows服務中託管。 當運行我的應用程序時,所有service1實例都連接到service2,並且一切正常。但是,當service2嘗試連接到service1的任何實例時,就會出現一個異常:「在net.tcp:// localhost:8732/TestComponent_6a4009df-cc68-4cd9-9414-16737c734548上沒有端點監聽,可以接受該消息。由不正確的地址或SOAP動作引起。請參閱InnerException(如果存在)以獲取更多詳細信息。「無法連接到託管應用程序託管的多個WCF服務
所有的services1實例都有唯一的地址(參見uri中的guid),但類似的服務契約和綁定類型。我使用打開端口共享的netTCP綁定。
任何建議?
注意:當我在託管應用程序中託管唯一一個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();
}
我使用portharing。它允許使用相同的端口。我的服務器也可以在8732端口上工作。正如我在每個應用程序僅託管一個service1實例並運行多個應用程序時編寫的,一切正常,並且它在單個端口上工作。 – Antonio