作法:設定自訂 WS-Metadata Exchange 繫結
本文說明如何設定自訂的 WS-Metadata Exchange 繫結。 Windows Communication Foundation (WCF) 包括四個系統定義的中繼資料繫結,但您可以使用想要的任何繫結來發行中繼資料。 本文會告訴您如何使用 wsHttpBinding
來發行中繼資料。 這個繫結會提供讓您以安全的方法公開中繼資料的選項。 本文中的程式碼是根據快速入門。
使用組態檔
在服務組態檔中,新增包含
serviceMetadata
標記的服務行為:<behaviors> <serviceBehaviors> <behavior name="CalculatorServiceBehavior"> <serviceMetadata httpGetEnabled="True"/> </behavior> </serviceBehaviors> </behaviors>
將
behaviorConfiguration
屬性新增至參照這個新行為的服務標記:<service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior" />
新增指定 MEX 為位址、指定
wsHttpBinding
為繫結,並指定 IMetadataExchange 為合約的中繼資料端點:<endpoint address="mex" binding="wsHttpBinding" contract="IMetadataExchange" />
若要驗證中繼資料交換端點是否正常運作,請在用戶端組態檔中新增端點標記:
<endpoint name="MyMexEndpoint" address="http://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
在用戶端的 Main() 方法中,建立新的 MetadataExchangeClient 執行個體、將其 ResolveMetadataReferences 屬性設為
true
、呼叫 GetMetadata,然後逐一查看傳回的中繼資料集合:string mexAddress = "http://localhost:8000/servicemodelsamples/service/mex"; MetadataExchangeClient mexClient = new MetadataExchangeClient("MyMexEndpoint"); mexClient.ResolveMetadataReferences = true; MetadataSet mdSet = mexClient.GetMetadata(new EndpointAddress(mexAddress)); foreach (MetadataSection section in mdSet.MetadataSections) Console.WriteLine("Metadata section: " + section.Dialect.ToString());
以程式碼設定
建立 WSHttpBinding 繫結執行個體:
WSHttpBinding binding = new WSHttpBinding();
建立 ServiceHost 執行個體:
ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);
新增服務端點,並新增 ServiceMetadataBehavior 執行個體:
serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, baseAddress); ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; serviceHost.Description.Behaviors.Add(smb);
新增中繼資料交換端點,指定稍早建立的 WSHttpBinding:
serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);
若要驗證中繼資料交換端點是否正常運作,請在用戶端組態檔中新增端點標記:
<endpoint name="MyMexEndpoint" address="http://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
在用戶端的 Main() 方法中,建立新的 MetadataExchangeClient 執行個體、將 ResolveMetadataReferences 屬性設為
true
、呼叫 GetMetadata,然後逐一查看傳回的中繼資料集合:string mexAddress = "http://localhost:8000/servicemodelsamples/service/mex"; MetadataExchangeClient mexClient = new MetadataExchangeClient("MyMexEndpoint"); mexClient.ResolveMetadataReferences = true; MetadataSet mdSet = mexClient.GetMetadata(new EndpointAddress(mexAddress)); foreach (MetadataSection section in mdSet.MetadataSections) Console.WriteLine("Metadata section: " + section.Dialect.ToString());