因此,我有一個在net.tcp和net.pipe上監聽的WCF服務。我已經生成了一個WCF代理客戶端,我希望它能夠通過tcp或命名管道進行連接。我不想在app.config中配置,但在代碼中。WCF綁定
WCF客戶端將在運行時獲取端點地址,如「net.tcp:// mymachine:10001/MyService」或「net.pipe:// localhost/MyService」。我會認爲它只是使用基於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等,但它可以工作......但我不確定我明白它們有什麼不同。
關於主題[理解WCF綁定和通道棧]的簡要討論(http://wcfanswers.blogspot.com/2012/06/understanding-wcf-bindings-and-channel.html)。通過這個來了解哪個綁定應該用於哪個場景。 – 2012-06-24 08:51:05