我有一個基於TCPListener的服務器應用程序,它監聽單個特定端口上的客戶端。客戶端連接,發送一些xml,返回一些xml作爲響應,然後斷開連接。WCF服務可以取代TCPListener的功能嗎?
是否有可能用WCF服務替換基於TCPListener的應用程序而不改變客戶端?如果有的話,任何人都可以建議哪些資源可以幫助我建立這樣的服務?
我有一個基於TCPListener的服務器應用程序,它監聽單個特定端口上的客戶端。客戶端連接,發送一些xml,返回一些xml作爲響應,然後斷開連接。WCF服務可以取代TCPListener的功能嗎?
是否有可能用WCF服務替換基於TCPListener的應用程序而不改變客戶端?如果有的話,任何人都可以建議哪些資源可以幫助我建立這樣的服務?
理論上是的。 WCF有很多可擴展點,所以你可以包含自己的message encoder,你自己的transport channel等等。你可以包含自定義行爲來影響消息格式等。即使你擁有專有的消息格式或傳輸協議,你也應該能夠做到這一點。但是這是很多工作。
如果你真的想嘗試它,你可以從自定義消息編碼器開始,它將消息並將其作爲自定義XML格式寫入二進制編碼器。將這個新的編碼器與自定義綁定結合在一起構建在tcpTransport中。這將很難調試。示例提供了添加JSONP支持的example。我認爲這是類似的做法。它使用內置的傳輸和編碼器,並添加自定義消息格式。
聽起來像很多工作沒有什麼好處,TCPListener解決方案運行良好,我只是好奇,如果這是可能的。 – Andrew 2010-09-07 23:07:10
簡單的基於tcp的服務器不遵循消息成幀協議,wcf的net.tcp遵循http://blogs.msdn.com/b/drnick/archive/2009/01/19/message-framing-part-1.aspx。
這使得很難實現一個WCF,它可以與使用自己的消息傳遞方案使用自定義TCP偵聽器服務的客戶端通信。
沒有*任何*更改爲客戶?在TCPListener之上使用什麼協議?如果它不是SOAP/JSON,我認爲沒有修改客戶端代碼就沒有多少運氣。 – 2010-09-07 16:14:06
它既不是,客戶端是第三方應用程序,這就是爲什麼我不能改變它們。 – Andrew 2010-09-07 23:06:23