2009-08-23 12 views
4

Ich habe ein Client- und Server-Szenario, in dem ein Dienst auf dem Client und ein anderer Dienst auf dem Server installiert ist. Ich habe keine Probleme, wenn diese auf verschiedenen Rechnern installiert sind. Ich möchte jedoch auch in der Lage sein, den Client-Dienst und den Server-Dienst auf demselben Computer zu installieren. Ich könnte sie einrichten, um verschiedene Ports zu verwenden, jedoch möchte ich dies mit einem einzigen Port erreichen.Können zwei Anwendungen denselben WCF NetTcpBinding-Anschluss verwenden, wenn sie unterschiedliche Endpunktadressen verwenden?

Ich habe den Windows-Dienst "Net.Tcp Port Sharing Service" aktiviert und gestartet. Ich starte zuerst den Serverdienst. Wenn ich versuche, den Client-Dienst zu starten, erhalte ich die folgende Ausnahme beim Ausführen serviceHost.Open():

The TransportManager failed to listen on the supplied URI using the NetTcpPortSharing service: the URI is already registered with the service.

Unterhalb der Quellcode ist. Beide Server und Client verwenden unterschiedliche Adressen Endpunkt wie folgt:

Service-Server:

ServiceHost serviceHost = new ServiceHost(typeof(ServerService), 
    new Uri("net.tcp://localhost:50000"); 
NetTcpBinding binding = new NetTcpBinding(); 
serviceHost.AddServiceEndpoint(typeof(IServerService), 
    binding, "ServerService"); 
serviceHost.Open(); 

Client Service:

ServiceHost serviceHost = new ServiceHost(typeof(ClientService), 
    new Uri("net.tcp://localhost:50000"); 
NetTcpBinding binding = new NetTcpBinding(); 
serviceHost.AddServiceEndpoint(typeof(IClientService), 
    binding, "ClientService"); 
serviceHost.Open(); 

Antwort

4

ich es gerade noch aufgelöst machen die Basis Urner verschiedenen während Instanziierung des ServiceHosts. Überarbeitete Code folgt:

Server

ServiceHost serviceHost = new ServiceHost(typeof(ServerService), 
    new Uri("net.tcp://localhost:50000/Server"); 
... 

Kunde

ServiceHost serviceHost = new ServiceHost(typeof(ClientService), 
    new Uri("net.tcp://localhost:50000/Client"); 
...