[英]How to use socket based client with WCF (net.tcp) service?
我開發了一個使用net.tcp適配器並偵聽特定端口的WCF服務。 我想使用普通的.net客戶端連接到該服務,該客戶端使用套接字將數據發送到端口並偵聽響應。
當我嘗試向此服務發送數據時,我收到錯誤:“現有連接被遠程主機強行關閉”。
但是,我能夠通過另一個使用WCF服務的地址/綁定/合同的客戶端連接該服務。
有沒有一種方法可以讓我通過使用普通的基於套接字的客戶端與WCF服務進行通信?
關鍵決定是否使WCF服務符合套接字客戶端,或者是否使套接字客戶端符合WCF服務。
嘗試符合WCF服務最簡單,而不是嘗試在WCF中實現自定義內容,這絕非易事。 在下面的“其他資源”部分的底部,您將看到一個鏈接,該鏈接描述了嘗試符合WCF服務所必需的消息檢查。
話雖如此,.NET套接字本身並不與WCF通信。
任何這樣做的嘗試都需要在WCF方面進行自定義編程。
無論您是使用.NET中的TcpClient還是原始套接字連接到WCF並與之通信都無關緊要。 必須使用WCF中的自定義邏輯處理任何此類互操作性。 請注意,Net.Tcp是一種自定義傳輸協議。 從技術上講,TCP的使用方式與TcpClient相同。
例如,UDP在Linux世界中的套接字服務器中非常常用。 WCF不提供內置UDP傳輸。 但是,WCF有一個UDP示例,它為WCF實現UDP。 遺憾的是,該示例未說明與非WCF UPD套接字服務器之間的通信。
我有一個非常詳細的突出問題,我解釋了我的努力,以便通常可以測試使用UDP的示例代碼...
還沒有人回答我的問題。 所以,如果你成功完成這項工作,我很感興趣。 我的情況是由希望WCF服務能夠調用在Linux上運行的UDP套接字服務器而不必使用非WCF編碼混亂我的服務。 我不想混合方法。
其他資源......
選擇運輸
本文指出“WCF TCP傳輸針對通信兩端都使用WCF的情況進行了優化”。
嘗試將非WCF客戶端連接到使用BasicHttpBinding的WCF服務。
開發人員最終通過WebClient編寫自定義代碼(而不是TcpClient)。
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c2d72c2d-c095-4ae1-b8ae-d15f32a4e0be/
WCF與Raw .NET套接字
答案指出可能需要TCP +二進制序列化或UDP +二進制序列化。 如上所述,有一個UDP綁定樣本。
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c0520111-c1ca-4ffd-a4e0-ac68e86130ee/
將自定義請求寫入簡單WCF服務
作者解釋了如何確定需要發送到服務的消息的格式,以便TcpClient或其他非WCF套接字客戶端可以將寫入信息發送到WCF服務。 這里的含義是您沒有嘗試符合WCF服務,而是強迫套接字客戶端執行繁重的工作。 即便如此,如果您期望這樣,您也無法獲得WCF綁定的內置優勢。
http://blogs.msdn.com/carlosfigueira/archive/2008/01/13/writing-custom-requests-to-simple-wcf-services.aspx
Net.TCP綁定使用的是一種自定義的線級框架格式,雖然Nicholas Allen最近在該主題上發布了一系列關於該主題的博客文章。 該系列從這里開始: http : //blogs.msdn.com/drnick/archive/2009/01/19/message-framing-part-1.aspx
說實話,Net.TCP目前對WCF到WCF通信更有用。 如果你想與你需要處理的自定義TCP格式互操作,你最好使用原始套接字或創建自己的自定義WCF傳輸通道(這可能不是微不足道,順便說一下)
HY,
你啟用了WCF跟蹤嗎? 因為如果您這樣做,您會收到以下消息: “該服務不允許您匿名登錄。” 那么它(通常)是一個安全設置問題。
在這種情況下,禁用綁定的安全模式:
<netTcpBinding>
<binding name="MyCustomBinding">
<security mode="None" />
</binding>
</netTcpBinding>
但更好的方法是使用證書。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.