簡體   English   中英

WCF綁定

[英]WCF Bindings

因此,我有一個正在監聽net.tcp和net.pipe的WCF服務。 我已經生成了一個WCF代理客戶端,我希望它能夠通過tcp或命名管道進行連接。 我不想在app.config中配置,但在代碼中。

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

但出現連接失敗-

如果將Binding更改為BindingElement,並將NamedPipeTransportBindingElement,TcpTransportBindingElement等與CustomBinding一起使用,則可以使用...但是我不確定我知道有什么區別。

不,你不能。 綁定中只能有一個傳輸元素,而沒有多個元素是沒有意義的。

您將必須查看該方案,然后基於該方案選擇正確的綁定。 使用Uri類可以很簡單地完成,它將為您執行解析。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM