2012-05-15 58 views
7

我正在研究包含多個需要彼此通信以傳遞數據的多個Windows服務的C#應用​​程序。這些服務可能在同一臺機器上,但它們可能是遠程的。我研究過使用WCF來達到這個目的,但是似乎WCF太重了,並且有很多額外的配置,對我來說似乎沒有必要(.NET 3.5是這裏的一個要求,我知道.NET 4簡化了這個)用於跨進程/機器通信的WCF替換

所以我的問題是,什麼是WCF的最佳替代品,除了提供此功能的不推薦的.NET Remoting?

+0

抱怨配置似乎一點點小。至於性能,NetTCP綁定在3.5中可用,所以不確定你的擔心是否在那裏。 –

+0

我更加好奇是否有替代品,以及它們可能是什麼。搜索Google總是將我指回WCF。這是來自通常編程Java的人,所以我習慣了RMI,EJB等等。 –

+4

我得出了或多或少的相同結論。我發現WCF的配置很棘手且不合格,並且在我也發現它太痛苦緩慢,並且不太願意釋放內存。也許我設置錯了,但它不像我希望的那樣表現良好,並且修復在無數的配置選項中並不明顯。我結束了編寫我自己的*輕量*遠程框架,我希望有一天能夠獲得open-source的批准。實現它並不是微不足道的。除非你對付這些問題,否則我會堅持使用WCF,直到它證明*有問題。 – spender

回答

14

我一直在使用PInvoke訪問Windows RPC運行時間近8年。就交通運輸而言,它非常快速而且非常可靠。當與像protobuf-csharp-port這樣的快速序列化器結合使用時,所產生的通信是堅如磐石的,並且very fast

所以從地面開始構建這個,這需要三個部分:

  1. 谷歌的協議緩衝器(protobuf-csharp-port)進行序列化。
  2. 我自己的CSharpTest.Net.RpcLibrary爲運輸。
  3. 有點膠代碼把它們從protobuf-csharp-rpc放在一起。

這些都是可以用的NuGet在以下軟件包:Google.ProtocolBuffersCSharpTest.Net.RpcLibraryGoogle.ProtocolBuffers.Rpc

以下是入門的快速破敗:

  1. 定義一組消息,並使用Google Protocol Buffer Language的服務。

  2. 一旦你已經定義了你將運行ProtoGen.exe來生成C#中的服務存根和消息。務必添加「-service_generator_type = IRPCDISPATCH」以生成正確的服務代碼。

  3. 現在您已經將生成的源文件添加到項目中並引用上面列出的軟件包中的三個程序集。

  4. 最後看看protobuf-csharp-rpc項目頁面上的示例客戶端/服務器代碼。將「SearchService」替換爲您的服務名稱,並且您應該準備好運行。

  5. (可選)更改RPC客戶端/服務器的配置。該示例顯示了僅使用本地主機的LRPC的使用;但是DemoRpcLibrary.cs源文件也顯示TCP/IP和命名管道。

您可以隨時給我發電子郵件(羅傑@我的用戶名)以獲取更多信息或示例。

更新

我寫了一個快速安裝指南:WCF replacement for cross process/machine communication

+0

這看起來像我正在尋找的替代方案,感謝您的信息! –

+1

@Andrew Landsverk,另見:http://csharptest.net/1177/wcf-replacement-for-cross-processmachine-communication/ –

+0

哇,感謝您抽出寶貴的時間來準備! –

2

你可能想要看看ZeroMQ,它非常輕巧和高效,並帶有良好的C#綁定。 (在我的手機上輸入這個名稱,這樣你就不得不自己google了,對不起)。

+0

我不會完全調用ZeroMQ輕量級。 –

+0

只要您不關心回覆,並且不擔心郵件掉到地上,ZeroMQ非常好。像所有隊列一樣,只有這麼多積壓可以存儲。 ZeroMQ在保證交付和請求/響應配置方面的表現尤其糟糕。 –