Forums Neueste Beiträge
 

WCF und Named Pipe

11/09/2009 - 09:00 von Martin Lentzsch | Report spam
Hallo zusammen,

ich benötige mal einen Anstoß. Ich möchte per WCF dass sich zwei
Instanzen der selben Anwendungen unterhalten. Zweck ist zu erkennen,
dass die Anwendung bereits gestartet ist und diese aktivieren. Wenn
jemand eine andere Idee als WCF Pipe hat wàre ich dankbar. Mit
httpBasicBinding habe ich alles hinbekommen, nur möchte ich keinen
HTTP Port für meine Anwendung aufmachen.

Folgendes habe ich gemacht : app.config das wie in der MSDN Hilfe
hinzugefügt :

<bindings>
<netNamedPipeBinding>
<binding name="Binding1"
hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536"
maxConnections="10"
maxReceivedMessageSize="65536"
receiveTimeout="00:10:00"
transactionFlow="false">
<security mode="None">
</security>
</binding>
</netNamedPipeBinding>
</bindings>

Dann erzeuge ich die Pipe :

ServiceHost MainHost;
MainHost = new ServiceHost(typeof(InternalCom)); // InternalCom
ist meine Funktionsklasse
// die das Interface IInternalCom implementiert.
MainHost.AddServiceEndpoint(typeof(IInternalCom), new
NetNamedPipeBinding(NetNamedPipeSecurityMode.None), "net.pipe://
localhost/lucki");
MainHost.Open();

Anschließend starte ich Applikation separat und verusuche über
Hinzufügen von Service References die Description auszulesen. Leider
habe ich ganau da meine Probleme. Er sagt :

Metadaten enthalten einen Verweis, der nicht aufgelöst werden kann:
"net.pipe://localhost/lucki".
Wenn der Dienst in der aktuellen Projektmappe definiert ist,
erstellen Sie die Projektmappe, und fügen Sie den Dienstverweis erneut
hinzu.

Der Dienst ist nicht erzeug und ich weiß auch nicht welchen Verweis
nicht aufgelöst werden kann.
Es finden sich auch so wenig Beispiele was NetNamedPipe angeht.

Wenn ich doch weiß, welches Interface ich implementiere und ansprechen
will, warum kann ich das Interface nicht einfach so nutzen wenn ich
nur sage, dass die Instanz aus ner Pipe kommt, so a la Delegate.

Bin dankbar für jegliche Ideen.

Gruß
Martin
 

Lesen sie die antworten

#1 Der Martin
11/09/2009 - 12:24 | Warnen spam
Ich habs gefunden genau so wie ich dachte :

ChannelFactory ist die Wahl des Tages:

string _ep = "net.pipe://localhost/lucki";
IInternalCom _icc = ChannelFactory<IInternalCom>.CreateChannel(new
NetNamedPipeBinding(NetNamedPipeSecurityMode.None),new EndpointAddress
(_ep));

So einfach kann das Leben sein.

Ähnliche fragen