2009-02-13 26 views
38

我開發了一個使用net.tcp適配器並偵聽特定端口的WCF服務。我想使用普通的.net客戶端連接到該服務,該客戶端使用套接字將數據發送到端口並偵聽響應。
當我嘗試將數據發送到此服務時,出現錯誤:「現有連接被遠程主機強行關閉」。
但是,我能夠通過使用WCF服務的地址/綁定/合同的另一個客戶端與服務連接。
有沒有一種方法可以讓我使用基於普通套接字的客戶端與WCF服務進行通信?如何使用基於套接字的客戶端與WCF(net.tcp)服務?

+0

要確保大家都明白你在這裏試圖做什麼......請你澄清一下,如果你正在嘗試使用.NET內置的套接字編程工具連接到Net.Tcp WCF服務,反之亦然? – 2009-02-14 18:15:53

+0

EnocNRoll,你是對的。 我正嘗試使用基於套接字的客戶端來傳遞基於net.tcp的WCF服務。 – Burhan 2009-02-16 09:33:12

回答

48

關鍵的決定是讓WCF服務符合套接字客戶端還是使套接字客戶端符合WCF服務。

這將是最簡單的嘗試符合WCF服務,而不是嘗試在WCF中實現自定義內容,這從來都不容易。在下面的其他資源部分的底部,您將看到一個鏈接,描述爲了符合WCF服務而必需的郵件檢查。

話雖如此,.NET套接字本身不會與WCF通信。

任何嘗試這樣做都需要在WCF端進行自定義編程。

無論您是使用TcpClient還是使用.NET中的原始套接字連接到WCF並與之通信都無關緊要。任何這樣的互操作性都必須在WCF中用自定義邏輯來處理。請注意,Net.Tcp是一種自定義傳輸協議。它在技術上並不像TcpClient那樣使用TCP。

例如,Linux世界中的套接字服務器非常常用UDP。 WCF不提供內置的UDP傳輸。但是,有一個WCF的UDP示例爲WCF實現了UDP。不幸的是,該示例沒有說明與非WCF UPD套接字服務器進行通信。

我有一個突出的問題,我解釋我的努力獲得的示例代碼一般是可測試使用UDP是相當詳細...

Is it possible to make the WcfTestClient work for custom transport channels?

沒有人回答我的問題呢。所以,如果你成功做出這項工作,我很感興趣。我的情況是由於希望WCF服務能夠呼叫到在Linux上運行的UDP套接字服務器而不必使用非WCF編碼混淆我的服務。我不想混用各種方法。

其他資源...

+10

我的答案絕對不值得被低估。 – 2009-02-14 19:03:35

0

Hy,

您是否啓用了WCF跟蹤功能?因爲如果你這樣做,你會得到以下消息:「該服務不允許你匿名登錄。」那麼它通常是一個安全設置問題。

在這種情況下,禁用安全模式的結合:

<netTcpBinding> 
    <binding name="MyCustomBinding"> 
     <security mode="None" /> 
    </binding> 
</netTcpBinding> 

但是更好的將是與證書的工作。

6

的net.tcp綁定使用了是不是真的記錄,雖然聶雅倫的話題開始了一系列博客文章的最近一個自定義線級幀格式。這個系列從這裏開始:http://blogs.msdn.com/drnick/archive/2009/01/19/message-framing-part-1.aspx

說實話,Net.TCP對於WCF到WCF通信來說確實是非常有用的。如果您想與您需要處理的自定義TCP格式進行互操作,則使用原始套接字或創建自己的自定義WCF傳輸通道(這可能不是微不足道的,順便說一句)要好得多了

相關問題