共用方式為


中繼資料發行行為

中繼資料發行行為範例會示範如何控制服務的中繼資料發行功能。為了避免意外洩露潛在的敏感服務中繼資料,Windows Communication Foundation (WCF) 服務的預設組態會停用中繼資料發行。這個行為依預設為安全行為,但也表示您無法使用中繼資料匯入工具 (例如 Svcutil.exe) 來產生呼叫服務所需的用戶端程式碼,除非組態中已明確啟用服務的中繼發行行為。

ms751498.Important(zh-tw,VS.90).gif 注意:
為了清楚說明,這個範例示範如何建立不安全的中繼資料發行端點。未經驗證的匿名使用者可能可以使用這類端點,所以部署前必須小心謹慎,才能確保公開服務中繼資料是否適切。如需保護中繼資料端點的範例,請參閱自訂安全中繼資料端點範例。

此範例是以實作 ICalculator 服務合約的使用者入門範例為基礎。在這個範例中,用戶端是主控台應用程式 (.exe),而服務則是由網際網路資訊服務 (IIS) 所裝載。

ms751498.note(zh-tw,VS.90).gif注意:
此範例的安裝程序與建置指示位於本主題的結尾。

為了讓服務公開中繼資料,服務上必須設定 ServiceMetadataBehavior。當這個行為存在時,您便可以發行中繼資料,方法是將端點設定成將 IMetadataExchange 合約當做 WS-MetadataExchange (MEX) 通訊協定的實作來進行公開。為了方便起見,這個合約已經被指定成縮寫組態名稱,"IMetadataExchange"。這個範例會使用 mexHttpBinding,這個快捷標準繫結等同於安全性模式設為 NonewsHttpBinding。"mex" 的相對位址是用於端點中,當解析服務基底位址時,會產生 https://localhost/servicemodelsamples/service.svc/mex 的端點位址。此行為組態列出如下:

  <behaviors>
    <serviceBehaviors>
      <behavior name="CalculatorServiceBehavior">
        <!-- The serviceMetadata behavior publishes metadata through 
             the IMetadataExchange contract. When this behavior is 
             present, you can expose this contract through an endpoint 
             as shown below. Setting httpGetEnabled to true publishes 
             the service's WSDL at the <baseaddress>?wsdl, for example,
             https://localhost/servicemodelsamples/service.svc?wsdl -->
        <serviceMetadata httpGetEnabled="True"/>
        <serviceDebug includeExceptionDetailInFaults="False" />
      </behavior>
    </serviceBehaviors>
  </behaviors>

此 MEX 端點列出如下。

      <!-- the MEX endpoint is exposed at 
           https://localhost/servicemodelsamples/service.svc/mex 
           To expose the IMetadataExchange contract, you 
           must enable the serviceMetadata behavior as demonstrated                         
           previously. -->
      <endpoint address="mex"
                binding="mexHttpBinding"
                contract="IMetadataExchange" />

這個範例會將 HttpGetEnabled 屬性設定為 true,也會使用 HTTP GET 公開服務的中繼資料。若要啟用 HTTP GET 中繼資料端點,服務必須有 HTTP 基底位址。查詢字串 ?wsdl 會用於服務的基底位址上,以便存取中繼資料。例如,若要在 Web 瀏覽器中檢視服務的 WSDL,您可以使用位址:https://localhost/servicemodelsamples/service.svc?wsdl。此外,您可以將 HttpsGetEnabled 設定為 true,以便使用這個行為來透過 HTTPS 公開中繼資料。這個作業需要 HTTPS 基底位址。

若要存取服務的 MEX 端點,請使用Service Model Metadata Utility Tool (Svcutil.exe)

svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" https://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs

這樣便會產生以該服務中繼資料為基礎的用戶端。

若要使用 HTTP GET 存取服務的中繼資料,請將瀏覽器指向 https://localhost/servicemodelsamples/service.svc?wsdl。

如果您移除這項行為並嘗試開啟服務,這時會發生例外狀況。這個錯誤的發生原因是如果不使用這項行為,透過 IMetadataExchange 合約設定的端點就不會有任何實作。

如果將 HttpGetEnabled 設定為 false,您就會看到 CalculatorService 說明網頁而不是服務的中繼資料。

若要設定、建置及執行範例

  1. 請確定您已執行 Windows Communication Foundation 範例的單次安裝程序

  2. 若要建置方案的 C# 或 Visual Basic .NET 版本,請遵循建置 Windows Communication Foundation 範例中的指示。

  3. 若要在單一或跨電腦的組態中執行本範例,請遵循執行 Windows Communication Foundation 範例中的指示。

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.