本節說明如何定義及實作 Windows Communication Foundation (WCF)合約。 服務合約會指定端點與外界通訊的內容。 在更具體的層面上,這是一種對特定訊息進行陳述的描述,這些訊息組織成基本訊息交換模式(MEPs),例如請求/回覆、單向和雙向。 如果服務合約是邏輯上相關的訊息交換集,服務作業就是單一訊息交換。 例如,作業 Hello 必須顯然接受一則訊息(因此呼叫端可以宣告問候語),而且可能或可能不會傳回訊息(視作業的禮貌而定)。
如需合約和其他核心 WCF 概念的詳細資訊,請參閱 基本 Windows Communication Foundation 概念。 本主題著重於瞭解服務合約。 如需如何建置使用服務合約來連線至服務之用戶端的詳細資訊,請參閱 WCF 用戶端概觀。 如需用戶端通道、客戶端架構和其他客戶端問題的詳細資訊,請參閱 用戶端。
概觀
本主題提供設計及實作 WCF 服務的高階概念方向。 子主題提供有關設計和實作細節的詳細資訊。 在設計和實作 WCF 應用程式之前,建議您:
瞭解服務合約是什麼、運作方式,以及如何建立服務合約。
瞭解合約會指出運行時間設定或裝載環境可能不支援的最低需求。
服務合約
服務合約是提供下列相關信息的語句:
服務中的作業群組。
作業的特徵是透過交換訊息表現出來的。
這些訊息的數據類型。
作業的位置。
用來支援與服務成功通訊的特定通訊協定和串行化格式。
例如,採購單合約的作業可能會 CreateOrder 接受訂單資訊類型的輸入,並傳回成功或失敗資訊,包括訂單識別碼。 它也可能有 GetOrderStatus 接受訂單標識碼並傳回訂單狀態信息的作業。 此類的服務合約會指定:
採購單合約是由
CreateOrder和GetOrderStatus作業所組成。這些作業已指定輸入訊息和輸出訊息。
這些訊息所能攜帶的數據。
關於成功處理訊息所需之通訊基礎結構的類別語句。 例如,這些詳細數據包括是否需要以及需要什麼形式的安全性來建立成功的通訊。
為了將這類資訊傳達給其他平臺上的應用程式(包括非Microsoft平臺),XML 服務合約會以標準 XML 格式公開表示,例如 Web 服務描述語言 (WSDL) 和 XML 架構 (XSD)等。 許多平臺的開發人員都可以使用此公用合約資訊來建立可以與服務通訊的應用程式,因為它們瞭解規格的語言,以及因為這些語言是設計來描述服務所支援的公用表單、格式和通訊協定來啟用互作。 如需 WCF 如何處理這類資訊的詳細資訊,請參閱 元數據。
但是,合約可以透過許多方式來表示,而 WSDL 和 XSD 是以無障礙方式描述服務的絕佳語言,但它們很難直接使用,但無論如何,它們只是服務的描述,而不是服務合約實作。 因此,WCF 應用程式會使用受控屬性、介面和類別來定義服務的結構並實作服務。
當用戶端或其他服務實作者需要時,Managed 型別中定義的產生的合約可以轉換(也稱為匯出)成為如 WSDL 和 XSD 的元數據,特別是在其他平臺上。 結果是一種簡單的程序設計模型,可使用公用元數據來描述任何用戶端應用程式。 基礎 SOAP 訊息的詳細數據,例如傳輸和安全性相關信息,可以留給 WCF,而 WCF 會自動執行與服務合約類型系統之間的必要轉換至 XML 類型系統。
如需設計合約的詳細資訊,請參閱 設計服務合約。 如需實作合約的詳細資訊,請參閱 實作服務合約。
此外,WCF 也提供在訊息層級完全開發服務合約的能力。 如需在訊息層級開發服務合約的詳細資訊,請參閱 使用訊息合約。 如需在非 SOAP XML 中開發服務的詳細資訊,請參閱 與 POX 應用程式的互作性。
瞭解需求階層
服務合約會將作業分組;指定那些訊息所攜帶的 MEP、訊息類型和數據類型;和表示實作必須支援合約的運行時間行為類別(例如,可能需要加密和簽署訊息)。 不過,服務合約本身並未精確指定符合這些需求的方式,只有必須符合這些需求。 何種加密類型或訊息的簽署方式,是符合規範服務的實作和設定。
請注意,合約要求服務合約實作的某些特定事項,以及運行時的組態以增加行為。 要啟用一項服務以供使用,所需符合的一組需求是建立在先前需求的基礎上。 如果合約需要實作,實作可能需要更多可讓服務執行的組態和系結。 最後,主應用程式也必須支援服務組態和系結新增的任何需求。
需謹記附加需求過程在設計、實作、設定及裝載 Windows Communication Foundation(WCF)服務應用程式時的重要性。 例如,合約可以指定需要支援會話。 若是如此,您必須設定系結以支援該合約需求,否則服務實作將無法運作。 或者,如果您的服務需要整合式 Windows 驗證,且裝載於 Internet Information Services (IIS),則服務所在的 Web 應用程式必須開啟整合式 Windows 驗證,且匿名支援已關閉。 如需不同服務主機應用程式類型功能和影響的詳細資訊,請參閱 裝載。