選擇傳輸
本主題探討在 Windows Communication Foundation (WCF)中包含的三個主要傳輸 (HTTP、TCP 和具名管道) 之間,進行選擇的準則。 WCF 也包括訊息佇列 (亦稱為 MSMQ) 傳輸,但是本文件不探討訊息佇列。
WCF 程式設計模型會將端點作業 (如服務合約中所示) 和連接兩個端點的傳輸機制,加以分隔。 如此可為您提供彈性以決定如何向網路公開您的服務。
在 WCF 中,可以使用由一系列「繫結項目」所組成的「繫結」,指定如何透過網路,在端點之間傳輸資料。 傳輸是由傳輸繫結項目表示,它是繫結的一部分。 繫結包含選擇性通訊協定繫結項目 (例如安全性)、必要的訊息編碼器繫結項目和必要的傳輸繫結項目。 傳輸會傳送或接收來往另一個應用程式之訊息的序列化形式。
如果您必須連線至現有的用戶端或伺服器,可能無法選擇使用特定的傳輸。 但 WCF 服務也可透過每個端點都有不同傳輸的多個端點,加以存取。 當單一傳輸未涵蓋您服務的目標對象時,請考慮在多個端點上公開服務。 然後用戶端應用程式可以使用最適合的端點。
在選擇傳輸之後,您必須選取使用它的繫結。 您可以選擇由系統提供的繫結 (請參閱系統提供的繫結),或是也可以建置自己的自訂繫結(請參閱自訂繫結)。 您也可以建立自己的繫結。 如需詳細資訊,請參閱建立使用者定義繫結。
各種傳輸的優點
本節將說明選擇這三種主要傳輸其中之一的主要原因,包括進行選擇的詳細決策圖表。
使用 HTTP 傳輸的時機
HTTP 是用戶端和伺服器之間的要求/回應通訊協定。 最常用的應用程式是由使用 Web 伺服器進行通訊的 Web 瀏覽器用戶端所組成的。 用戶端會將要求傳送至伺服器,接聽用戶端要求訊息。 當伺服器收到要求時,會傳回一個回應,其中包含要求的狀態。 如果成功,會傳回選擇性資料 (例如網頁、錯誤訊息或其他資訊)。 如需 HTTP 通訊協定的詳細資訊,請參閱 HTTP - 超文字傳輸通訊協定 (英文)。
HTTP 通訊協定不是以連線為基礎,一旦傳送回應,便不會維護狀態。 若要處理多頁異動,應用程式必須持續必要的狀態。
在 WCF 中,已針對與舊版非 WCF 系統的互通性,最佳化了 HTTP 傳輸繫結。 如果所有的通訊方都使用 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 遠端桌面」工作階段的限制,除非它們有更高的權限。
警告
在 IIS 所裝載的多個網站上使用具名管道傳輸搭配弱式萬用字元 URL 保留項目時,可能會發生下列錯誤:嘗試監聽網站 '2' 時,通訊協定 'net.pipe' 的啟動服務 'NetPipeActivator' 發生錯誤,因此已為該網站暫時停用此通訊協定。 請參閱例外狀況訊息以了解詳細資訊。 URL:WeakWildcard:net.pipe:/<機器名稱>/ Status: ConflictingRegistration Exception: Process Name: SMSvcHost Process ID: 1076\
選擇傳輸的決策點
下表說明用於選擇傳輸的常見決策點。 建議您考慮適用於您應用程式的其他屬性和傳輸。 請辨識對您應用程式很重要的屬性,辨識與您各個屬性有正面關聯的傳輸,然後選擇最適合您屬性組的傳輸。
屬性 | 描述 | 偏好的傳輸 |
---|---|---|
診斷 | Diagnostics 可讓您自動偵測傳輸連接問題。 所有的傳輸都支援傳回說明連接之錯誤資訊的能力。 但 WCF 不包括調查網路問題的診斷工具。 | 無 |
裝載 | 所有 WCF 端點都必須裝載在應用程式內。 IIS 6.0 及更早版本只支援使用 HTTP 傳輸的主控應用程式。 在 Windows Vista 上,已加入了主控所有 WCF 傳輸的支援,包括 TCP 和具名管道。 如需詳細資訊,請參閱 Internet Information Services 和 Windows 處理序啟用服務中的主控。 | HTTP |
檢查 | Inspection 是在傳輸期間從訊息擷取及處理資訊的能力。 HTTP 通訊協定會分開路由及控制資訊與資料,讓它更容易建立檢查及分析訊息的工具。 容易檢查的傳輸在網路應用裝置中可能也需要較少的處理能力。 所使用的安全性層級會影響是否可以檢查訊息。 | HTTP |
Latency | Latency 是完成訊息交換所需要的最小時間量。 所有的網路作業多少都會有延遲時間,視所選擇的傳輸而定。 與原生訊息交換模式為要求/回覆的傳輸 (例如 HTTP) 使用雙工或單向通訊,會因訊息的強制關聯造成額外的延遲時間。 在這種情況中,請考慮使用原生訊息交換模式為雙工的傳輸,例如 TCP。 | TCP、具名 Pipe |
Reach | 傳輸的範圍反映出傳輸與其他系統連線時的功能。 具名管道傳輸的範圍非常小;它只能連至在相同電腦上執行的服務。 TCP 和 HTTP 傳輸都有極佳的範圍,而且可以穿透某些 NAT 和防火牆組態。 如需詳細資訊,請參閱使用 NAT 和防火牆。 | HTTP,TCP |
安全性 | Security 是在傳輸期間藉由提供機密性、完整性或驗證來保護訊息的能力。 機密性可保護訊息不受檢查,完整性可保護訊息不受修改,而驗證可提供有關訊息的傳送者或接收者的保證。 WCF 支援訊息層級和傳輸層級的傳輸安全性。 如果傳輸支援緩衝傳輸模式,訊息安全性便會以該傳輸組成。 傳輸安全性的支援會依所選擇的傳輸而有所不同。 HTTP、TCP 和具名管道傳輸在傳輸安全性的支援中,有合理的同位檢查。 |
全部 |
輸送量 | Throughput 是測量可以在指定的時間內傳輸及處理的資料量。 和延遲時間一樣,所選擇的傳輸會影響服務作業的輸送量。 將傳輸的輸送量最大化需要最小化傳輸內容的額外負荷,以及最小化等待訊息交換完成所花費的時間。 TCP 和具名管道傳輸都會為訊息本文增加少許額外負荷,並支援減少等候訊息回覆時間的原生雙工類型。 | TCP、具名管道 |
工具 | Tooling 代表開發、診斷、裝載和其他活動之通訊協定的協力廠商應用程式支援。 開發搭配 HTTP 通訊協定使用的工具和軟體代表極大的投資。 | HTTP |