[英]WCF TCP binding or Named pipes for grid computing?
我正在構建一個分布式系統。 有幾種應用程序(有些是基於.Net的(C#),有些是基於C ++的(不是C ++ / CLI!))。 這些應用程序將安裝在群集中的每台計算機上(當前由Windows驅動)。 在本地PC上,我用於IPC:用於C#應用程序的MemoryMappedFiles,用於C ++應用程序的共享內存,用於C#和C ++之間的IPC的命名管道。 在Internet上,我使用WCF TCP綁定,並使用C#應用程序作為C ++應用程序的橋梁。
局域網通信中最好使用什么? 看來MPICH2使用TCP ...具有優化(禁用安全性等)的典型命名管道是否比WCF TCP綁定更快? 消息將非常大,大部分為雙類型。 在我的情況下,WCF非常方便(所有數學方法都只是合同),但是它的性能是一個問題。
請閱讀http://weblogs.asp.net/spano/archive/2007/10/02/choosing-the-right-wcf-binding.aspx 。
您會看到選擇取決於服務所在的位置。 希望能幫助到你。
您要混合兩個不同的層,也可以在NamedPipes上運行WCF 。 命名管道(雖然可以使用許多設置字),但並不是為了在兩台計算機上的兩個進程之間進行通信而設計的。
請參閱有關選擇傳輸的 MSDN頁面,以幫助您了解何時使用哪種傳輸。
每種運輸的優勢
本節描述了選擇三種主要傳輸方式中的任何一種的主要原因,並包括在其中選擇的詳細決策圖。
何時使用HTTP傳輸
HTTP是客戶端和服務器之間的請求/響應協議。 最常見的應用程序包括與Web服務器通信的Web瀏覽器客戶端。 客戶端向服務器發送請求,服務器監聽客戶端請求消息。 服務器收到請求后,將返回響應,其中包含請求的狀態。 如果成功,則返回可選數據,例如網頁,錯誤消息或其他信息。 有關HTTP協議的更多信息,請參見HTTP-超文本傳輸協議。
HTTP協議不是基於連接的,一旦發送響應,就不會維護任何狀態。 要處理多頁事務,應用程序必須保留任何必要的狀態。
在WCF中,HTTP傳輸綁定已針對與傳統非WCF系統的互操作性進行了優化。 如果所有通信方都在使用WCF,則基於TCP或基於命名管道的綁定會更快。 有關更多信息,請參見NetTcpBinding和NetNamedPipeBinding。
何時使用TCP傳輸
TCP是基於連接的,面向流的交付服務,具有端到端的錯誤檢測和更正。 基於連接的意思是在交換數據之前在主機之間建立通信會話。 主機是TCP / IP網絡上由邏輯IP地址標識的任何設備。
TCP提供可靠的數據傳遞和易用性。 具體地說,TCP通知數據包傳送給發送方,確保數據包以它們發送的相同順序傳送,重新傳輸丟失的數據包,並確保數據包不重復。 請注意,這種可靠的傳遞適用於兩個TCP / IP節點之間,而不是與WS-ReliableMessaging相同,后者在端點之間適用,無論它們可能包含多少個中間節點。
WCF TCP傳輸針對通信的兩端都使用WCF的情況進行了優化。 對於涉及不同機器之間通信的方案,此綁定是最快的WCF綁定。 消息交換使用BinaryMessageEncodingBindingElement進行優化的消息傳輸。 TCP提供雙工通信,因此即使客戶端位於網絡地址轉換(NAT)后面,TCP也可用於實現雙工合同。
何時使用命名管道傳輸
命名管道是Windows操作系統內核中的對象,例如進程可用於通信的共享內存部分。 命名管道具有名稱,可用於單台機器上進程之間的單向或雙工通信。
如果需要在一台計算機上的不同WCF應用程序之間進行通信,並且您希望防止與另一台計算機進行任何通信,請使用命名管道傳輸。 另一個限制是,除非具有提升的特權,否則從Windows遠程桌面運行的進程可能僅限於同一Windows遠程桌面會話。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.