2011-08-17 58 views
6

我有一個客戶端設備(POS手持設備),它通過TCP/IP或RS232與它的服務器進行通信。該協議是一個給定的二進制格式,我不能改變。我必須爲該設備實施服務器。我的印象是,WCF將是比手工實現任何東西都更好的選擇。但是,因爲需要一段時間才能嘗試,所以我想徵詢一下意見,不管這是否是一個好主意,以及是否可以對WCF進行微調以達到如此詳細的級別。我應該使用WCF來實現給定的二進制網絡協議嗎?

我發現了一些類似於我的問題,但在這些情況下,OP始終完全控制客戶端和服務器。我的情況並非如此。

如果WCF是一個好主意 - 我認爲 - 一些起點將非常讚賞。大多數文檔都着重於SOAP,REST等等,而不是我不得不使用的較低級別。

回答

4

與WCF合作多年(並且喜歡它),我不認爲這是您的需求的最佳選擇。正如菲爾提到的,它最適合用在網絡服務上,而不是低層次的通信。爲了在WCF中實現這個功能,你需要編寫一個自定義傳輸,與幾乎所有的低級(通道編程)一樣,它包含大量的代碼。此傳輸需要使用套接字來理解設備協議,並且您需要以某種方式將來自協議的消息轉換爲WCF消息。

如果協議很簡單,我認爲基於「純」套接字的實現將是最好的方法。無論如何,WCF解決方案中都需要套接字處理代碼(與設備通信),但是您可以創建自己的消息類型,而不必遵循WCF使用的(而非SOAP友好的)消息協議。

如果您要一路走下去並實現自定義的WCF傳輸,那麼它會「協商」該協議,如果您要將它展示給已經習慣了WCF的許多不同人員,實施服務的方式 - 您必須承擔編寫WCF傳輸的初始(非常高)成本,但稍後人們可以使用WCF提供的良好合同模型爲該設備編寫服務。

2

WCF具有相當的學習曲線,如果您需要定製大量非常低級別的東西,曲線會更陡峭。

此外,WCF創建的原因是爲了讓開發人員不必擔心較低級別的實現細節。看起來好像你想要兩全其美,這意味着你可能會花大部分時間與WCF戰鬥,以達到你想要的效果。

聲明:雖然我對WCF有基本的瞭解,但我不是專家,我可能是錯的。