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