Frage

Also, ich habe einen WCF-Dienst, der auf beiden net.tcp und net.pipe hört. Ich habe ein WCF-Proxy-Client generiert, und ich möchte es über TCP oder Named Pipe verbinden können. Ich will nicht die Config in app.config, aber im Code.

Der WCF-Client wird die Endpunkt-Adresse zur Laufzeit, so etwas wie "net.tcp: // mymachine: 10001 / MyService" erhalten oder "net.pipe: // localhost / MyService". Ich würde denken, dass es nur das richtige NetTcpBinding oder NetNamedPipeBinding Basis von dem Uri-Schema verwenden würde - aber es sieht nicht so aus.

Kann ich nicht einfach den Proxy einrichten nehmen entweder Named Pipe oder TCP-Bindungen, und es wird das wählen, basierend auf der Endpunkt-Adresse?

EDIT: Okay, so dass ich das Schema schnuppern und bevölkern die Bindung:

var uri = new Uri("net.tcp://localhost:10001/MyService");
Binding b;
if (uri.Scheme == Uri.UriSchemeNetPipe) {
    b = new NetNamedPipeBinding();
} else if (uri.Scheme == Uri.UriSchemeNetTcp) {
    b = new NetTcpBinding();
} else if (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps) {
    b = new WSHttpBinding();
}

var proxy = new ClientProxy(b, new EndpointAddress(uri));

, aber ich bekomme einen Verbindungsfehler - "Das Kommunikationsobjekt, System.ServiceModel.Channels.ServiceChannel, kann nicht für die Kommunikation verwendet werden, da sie im Zustand Faulted sind"

Wenn eine Änderung an einem Binding Bindung, und verwenden Sie NamedPipeTransportBindingElement, TcpTransportBindingElement, etc. mit einem Custom es funktioniert ... aber ich bin nicht sicher, ob ich verstehe, was der Unterschied ist.

War es hilfreich?

Lösung

Nein, kann man nicht. Es kann nur ein Transportelement in der Bindung sein, mehr als eine, die nur keinen Sinn macht.

Sie werden an der Regelung aussehen, und dann auf der Grundlage, dass, wählen Sie die richtige Bindung. Es ist einfach genug zu tun, die Uri-Klasse, die die Analyse für Sie durchführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top