質問

だから、私はnet.tcpとnet.pipeの両方でリッスンしているWCFサービスを提供しています。私は、WCFプロキシクライアントを生成してきた、と私はtcpまたは名前付きパイプを経由して接続できるようにしたいと思います。私はApp.configファイルで設定をしたいが、コードではありません。

":// MYMACHINE:10001 / MyServiceでnet.tcp" または "net.pipe:// localhost /をMYSERVICE"

WCFクライアントは、その実行時にエンドポイントアドレス、のようなものを取得します。私はそれだけでURIスキームオフに基づいて正しいNetTcpBindingやNetNamedPipeBindingを使用したいと思うだろう - しかし、それはそのようには見えません。

私は、名前付きパイプまたはTCPバインディングのいずれかを取るためにプロキシを設定することはできません、それはエンドポイントアドレスに基づいていずれかを選択します?

編集:わかりましたので、私はスキームを盗聴し、結合を移入ます:

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));

私は、接続の失敗を取得 - <私>「それはフォルト状態であるため、通信オブジェクト、System.ServiceModel.Channels.ServiceChannelは、通信に使用することはできません。」

の変化はBindingElementにバインドした場合、およびそれが動作CustomBindingとなどNamedPipeTransportBindingElement、TcpTransportBindingElementを、使用...しかし、私は、私は違いが何であるかを理解していない。

役に立ちましたか?

解決

いいえ、あなたがすることはできません。のみ意味がありません。ただ以上の1つを有する、結合で一つのトランスポート要素が存在することができます。

あなたはスキームを見ている、そしてそれに基づいて、正しい結合を選択します。それはあなたのための構文解析を行いますウリのクラスを使用して、行うのに十分に簡単です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top