HOW TO:擷取中繼資料並實作相容性服務

服務通常不會由同一個人設計並實作。在重視應用程式之間互通性的環境中,可以使用 Web 服務描述語言 (WSDL) 來設計或描述合約,而開發人員則必須實作符合所提供合約的服務。您也可能想要將現有服務移轉至 Windows Communication Foundation (WCF),但是保留 Wire 格式。此外,雙工合約還會要求呼叫端也必須實作回呼合約。

在這些情況下,就必須使用 ServiceModel Metadata Utility Tool (Svcutil.exe) (或對等的工具) 產生使用 Managed 語言的服務合約介面,方便您進行實作來滿足合約的需求。通常會使用 ServiceModel Metadata Utility Tool (Svcutil.exe) 來取得與通道處理站或 WCF 用戶端型別以及用戶端組態檔 (用來設定正確的繫結和位址) 搭配使用的服務合約。若要使用產生的組態檔,您必須將它變更為服務組態檔。您可能還需要修改服務合約。

若要擷取資料並實作相容服務

  1. 使用 ServiceModel Metadata Utility Tool (Svcutil.exe),依據中繼資料檔案或中繼資料端點產生程式碼檔案。

  2. 搜尋輸出程式碼檔案中包含標示有 System.ServiceModel.ServiceContractAttribute 屬性之所需介面 (如果有一個以上) 的部分。下列程式碼範例顯示由 ServiceModel Metadata Utility Tool (Svcutil.exe) 產生的兩個介面。第一個 (ISampleService) 是您為了建立相容服務而實作的服務合約介面。第二個 (ISampleServiceChannel) 是供用戶端使用的 Helper 介面,這個介面會擴充服務合約介面及 System.ServiceModel.IClientChannel,而且可以在用戶端應用程式中使用。

  3. 如果 WSDL 沒有為所有的作業指定回覆動作,則產生的作業合約可能會將 ReplyAction 屬性設定為萬用字元 (*)。請移除這個屬性設定。否則,當您實作服務合約中繼資料時,就無法匯出這些作業的中繼資料。

  4. 在類別上實作介面並裝載服務。例如,請參閱 HOW TO:實作 Windows Communication Foundation 服務合約,或參閱以下「範例」一節中的簡單實作。

  5. ServiceModel Metadata Utility Tool (Svcutil.exe) 產生的用戶端組態檔中,將 <client> 組態區段變更為 <services> 組態區段。(如需所產生之用戶端應用程式組態檔的範例,請參閱下列<範例>一節)。

  6. <services> 組態區段內,將 name 屬性建立於服務實作的 <services> 組態區段中。

  7. 將服務的 name 屬性設定為服務實作的組態名稱。

  8. 將使用實作服務合約的端點組態項目加入至服務組態區段。

範例

下列程式碼範例顯示依據中繼資料檔案執行 ServiceModel Metadata Utility Tool (Svcutil.exe) 所產生的程式碼檔案之主要部分。

下列程式碼顯示:

  • 服務合約介面,這個介面會在實作之後符合合約需求 (ISampleService)。
  • 供用戶端使用的 Helper 介面,這個介面會擴充服務合約介面及 System.ServiceModel.IClientChannel,而且可以在用戶端應用程式中 (ISampleServiceChannel) 使用。
  • Helper 類別,這個類別會擴充 System.ServiceModel.ClientBase,而且可以在用戶端應用程式 (SampleServiceClient) 中使用。
  • 從服務產生的組態檔。
  • 簡易 ISampleService 服務實作。
  • 用戶端組態檔轉換為服務端版。

請參閱

其他資源

ServiceModel Metadata Utility Tool (Svcutil.exe)