本主題討論在 Windows Communication Foundation (WCF): HTTP、TCP 和命名管道中包含的三個主要傳輸之間選擇的準則。 WCF 也包含消息佇列(也稱為 MSMQ)傳輸,但本檔未涵蓋消息佇列。
WCF 程式設計模型會將端點作業與連接兩個端點的傳輸機制分開(如服務合約所示)。 這可讓您彈性決定如何將服務公開至網路。
在 WCF 中,您可以透過使用由一系列繫結元素組成的繫結來指定如何在網路的端點之間傳輸資料。 傳輸是由傳輸綁定項表示,這是系結的一部分。 系結包含選擇性通訊協議綁定項,例如安全性、必要的訊息編碼器綁定項,以及必要的傳輸綁定項。 傳輸介面會將訊息的串行化形式傳送給或從另一個應用程式接收。
如果您必須連線到現有的用戶端或伺服器,您可能沒有使用特定傳輸的選項。 不過,WCF 服務可以透過多個端點來存取,每個端點都有不同的傳輸。 當單一傳輸未涵蓋您服務的預期物件時,請考慮透過多個端點公開服務。 用戶端應用程式接著可以使用最適合它們的端點。
選擇傳輸之後,您必須選取使用該傳輸的系結。 您可以選擇系統提供的系結(請參閱 System-Provided 系結),也可以建置自己的自定義系結(請參閱 自定義系結)。 您也可以建立自己的系結。 如需詳細資訊,請參閱 建立 User-Defined 系結。
每種交通工具的優點
本節說明選擇三種主要交通方式之一的主要原因,包括在這些交通方式之間進行選擇的詳細決策圖表。
使用 HTTP 傳輸的時機
HTTP 是客戶端與伺服器之間的要求/回應通訊協定。 最常見的應用程式是由與 Web 伺服器通訊的網頁瀏覽器用戶端所組成。 用戶端會將要求傳送至伺服器,以接聽用戶端要求訊息。 當伺服器收到要求時,它會傳回回應,其中包含要求的狀態。 如果成功,則會傳回選擇性數據,例如網頁、錯誤訊息或其他資訊。 如需 HTTP 通訊協定的詳細資訊,請參閱 HTTP - 超文字傳輸通訊協定。
HTTP 通訊協定不是以連線為基礎,一旦傳送回應,就不會維護任何狀態。 若要處理多頁交易,應用程式必須保存任何必要狀態。
在 WCF 中,HTTP 傳輸系結已針對與舊版非 WCF 系統的互作性進行優化。 如果所有通訊方都使用 WCF,基於 TCP 或命名管道的繫結會更快。 如需詳細資訊,請參閱 NetTcpBinding 和 NetNamedPipeBinding。
使用 TCP 傳輸的時機
TCP 是以連線為基礎的數據流導向傳遞服務,具有端對端錯誤偵測和更正。 線上型 表示在交換數據之前,會先建立主機之間的通訊會話。 主機是邏輯IP位址所識別之TCP/IP網路上的任何裝置。
TCP 提供可靠的數據傳遞和易於使用。 具體來說,TCP 會通知封包傳遞的傳送者、保證封包的傳遞順序與傳送封包的順序相同、重新傳輸遺失的封包,並確保數據封包不會重複。 請注意,這種可靠的傳遞僅適用於兩個 TCP/IP 節點之間,並不等同於 WS-ReliableMessaging,後者不論包含多少個中繼節點,皆適用於端點之間。
WCF TCP 傳輸已針對使用 WCF 的兩端案例進行優化。 此系結是涉及在不同機器之間通訊的案例中最快的 WCF 系結。 訊息交換會使用 BinaryMessageEncodingBindingElement 進行優化的訊息傳輸。 TCP 提供雙工通訊,因此可以用來實作雙工合約,即使用戶端位於網路位址轉換 (NAT) 後方也一樣。
何時使用命名管道傳輸
命名管道是 Windows 作業系統核心中的一個物件,例如程序可用於通訊的共用記憶體區段。 命名管道是具有名稱的,並且可以用於同一台電腦上程序之間的單向或雙向通信。
當單一計算機上不同 WCF 應用程式之間需要通訊,而且您想要防止來自另一部計算機的通訊時,請使用命名管道傳輸。 另一項限制是,從 Windows 遠端桌面執行的進程可能會限製為相同的 Windows 遠端桌面會話,除非它們具有更高的許可權。
警告
在搭配弱式通配符 URL 保留的多個由 IIS 裝載的網站上使用命名管道傳輸時,可能會出現以下錯誤:通訊協定 'net.pipe' 的啟用服務 'NetPipeActivator' 在嘗試接聽網站 '2' 時發生錯誤,因此該網站的通訊協定會被暫時停用。 如需詳細資訊,請參閱例外狀況訊息。 URL:WeakWildcard:net.pipe:/<machine name>/ Status:ConflictingRegistration Exception:Process Name:SMSvcHost Process ID:1076\
選擇交通的考量因素
下表描述用來選擇傳輸的常見決策點。 您應該考慮套用至應用程式的任何其他屬性和傳輸。 識別對您應用程式而言很重要的屬性、識別與每個屬性產生良好關聯的傳輸,然後選取最適合您屬性集的傳輸。
| 屬性 | 說明 | 偏好的交通工具 |
|---|---|---|
| 診斷 | 診斷可讓您自動偵測傳輸連線問題。 所有傳輸都具備回傳描述連線問題的錯誤資訊的能力。 不過,WCF 不包含用於調查網路問題的診斷工具。 | 沒有 |
| 主機托管 | 所有 WCF 端點都必須裝載於應用程式內。 IIS 6.0 和舊版僅支援裝載使用 HTTP 傳輸的應用程式。 在 Windows Vista 上,新增了支援以裝載所有 WCF 傳輸方式,包括 TCP 和命名管線。 如需詳細資訊,請參閱 因特網資訊服務中的主機服務 和 Windows Process Activation Service中的主機服務。 | HTTP 協定 |
| 檢查 | 檢查是在傳輸期間從訊息中擷取和處理資訊的能力。 HTTP 通訊協定會分隔路由和控制資訊與數據,讓您更輕鬆地建置檢查和分析訊息的工具。 容易檢查的傳輸在網路設備中可能需要較少的處理能力。 使用的安全性層級會影響是否可以檢查訊息。 | HTTP 協定 |
| 延遲 | 延遲是完成訊息交換所需的最短時間量。 根據傳輸的選擇,所有網路作業都有較多或更少的延遲。 使用雙工或單向通訊搭配原生訊息交換模式為要求-回復的傳輸,例如 HTTP,可能會因訊息的強制關聯而導致額外的延遲。 在這種情況下,請考慮使用本身具備雙工訊息交換模式的傳輸方式,例如 TCP 。 | TCP,命名 管 |
| 達到 | 運輸系統的覆蓋範圍反映其連接其他系統的能力。 命名管道傳輸的範圍非常有限;它只能連接到在同一部電腦上執行的服務。 TCP 和 HTTP 傳輸都具有絕佳的觸達性,而且可以穿透某些 NAT 和防火牆組態。 如需詳細資訊,請參閱 使用 NAT 和防火牆。 | HTTP、TCP |
| 安全 | 安全性是透過提供機密性、完整性或驗證,在傳輸期間保護訊息的能力。 機密性可保護訊息不受檢查、完整性保護訊息不受修改,而驗證可保證訊息的傳送者或接收者。 WCF 支援訊息層級和傳輸層級的傳輸安全性。 如果傳輸支援緩衝傳輸模式,則訊息安全性會與傳輸組合。 傳輸安全性的支援會因選擇的傳輸而有所不同。 HTTP、TCP 和命名管道傳輸在支援傳輸安全性方面具有合理的同位性。 |
全部 |
| 吞吐量 | 輸送量會測量可在指定時間內傳輸和處理的數據量。 如同延遲,所選的傳輸可能會影響服務作業的輸送量。 將傳輸的輸送量最大化,需要將傳輸內容的額外負荷降至最低,以及將等候訊息交換完成所花費的時間降到最低。 TCP 和命名管道傳輸皆僅對訊息本文增加一些額外負擔,並支援原生雙工方式以減少訊息回復的等待時間。 | TCP,命名管道 |
| 工具製造 | 工具指的是對開發、診斷、託管及其他活動的協定提供的第三方應用程式支援。 開發與 HTTP 通訊協定搭配運作的工具和軟體,表示投資特別大。 | HTTP 協定 |