2014-09-24 108 views
1

我正在創建一個服務,我有兩個嚴格的要求:服務必須通過TCP進行通信;該服務必須能夠互操作。我可以通過WCF服務確保TCP的互操作性嗎?

我對WCF的TCP傳輸了解得越多,似乎就不能保證可以互操作。我今天寫一個自定義綁定可能是它周圍的方式,但TcpTransportBindingElement似乎也是特定的.NET:

的WCF TCP傳輸對於其中的 通信兩端都使用WCF場景進行了優化。

WCF中的服務是否符合這些要求?有沒有辦法讓WCF使用標準(非專有)TCP?

+0

「互通」與什麼?爲了能夠回答它是否「符合您的要求」,我們需要知道您的要求狀態您必須與之互操作。另外,您是否知道內置綁定的全部***使用TCP,它只是TCP上的消息協議,當您切換類型時會發生變化。 – 2014-09-24 13:37:22

+0

我認爲「互操作性」我的意思是我們不能限制客戶端使用什麼技術,無論是.NET還是Java或其他。這個需求可以更清楚地表述爲「使用任何技術從客戶端接收TCP消息」。 – bucktronic 2014-09-24 14:02:07

回答

0

如果您試圖與其他.NET應用程序「互操作」,則任何綁定都可以兼容。如果您試圖與其他支持SOAP消息的Java平臺「可互操作」,但不一定與NetTcpBinding中使用的Microsoft專有消息協議一起使用,那麼您可能希望使用名稱中包含「Http」的any of the protocols

對於TCP,所有系統提供的綁定都使用TCP進行傳輸,它們之間的所有區別在於消息協議如何在TCP之上工作。

+0

好的,這很有趣,謝謝。對我們所做的更全面的解釋是,我們的服務器和未知客戶端都在遵循第三方標準,即「每個人都必須通過TCP進行通信並將這些消息傳遞給另一個人」。我們曾經在socket層做過,現在想通過WCF來做。所以我想我只想確保WCF服務可以在沒有專有消息編碼的情況下完成TCP,如果TCP正常,我應該能夠創建自定義綁定來處理消息。 – bucktronic 2014-09-24 14:27:01

+1

你是正確的「並將這些消息傳遞給另一個」將是困難的部分,你將需要編寫自己的[自定義編碼器](http://msdn.microsoft.com/en-us/library/ms735115 (v = vs.110).aspx)遵循消息協議。你可能能夠在編碼器下使用.NET內置的TCP傳輸,但如果它不起作用,你可以隨時[寫一個自定義的](http://blogs.msdn.com/b/drnick/存檔/ 2006/05/08/592110.aspx)。但是你只需要在它上面重新實現一個wcf圖層的套接字圖層程序,這可能比它的價值更麻煩。 – 2014-09-24 14:58:28

+1

@bucktronic提供了更多的細節,我建議你放棄嘗試使用WCF,並創建一個包裝你的套接字實現的類,並使用易於使用的調用來代表你想發送的各種消息。我認爲這會少一些令人頭疼的事情,並且會容易得多。 – 2014-09-24 15:01:54