Instrukcje: Konfigurowanie niestandardowego wiązania WS-Metadata Exchange
W tym artykule wyjaśniono, jak skonfigurować niestandardowe powiązanie wymiany metadanych WS. Program Windows Communication Foundation (WCF) zawiera cztery powiązania metadanych zdefiniowanych przez system, ale można publikować metadane przy użyciu dowolnego powiązania. W tym artykule przedstawiono sposób publikowania metadanych przy użyciu elementu wsHttpBinding
. To powiązanie zapewnia opcję uwidaczniania metadanych w bezpieczny sposób. Kod w tym artykule jest oparty na artykule Wprowadzenie.
Używanie pliku konfiguracji
W pliku konfiguracji usługi dodaj zachowanie usługi zawierające
serviceMetadata
tag :<behaviors> <serviceBehaviors> <behavior name="CalculatorServiceBehavior"> <serviceMetadata httpGetEnabled="True"/> </behavior> </serviceBehaviors> </behaviors>
behaviorConfiguration
Dodaj atrybut do tagu usługi, który odwołuje się do tego nowego zachowania:<service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior" />
Dodaj punkt końcowy metadanych określający mex jako adres,
wsHttpBinding
jako powiązanie i IMetadataExchange jako kontrakt:<endpoint address="mex" binding="wsHttpBinding" contract="IMetadataExchange" />
Aby sprawdzić, czy punkt końcowy wymiany metadanych działa poprawnie, dodaj tag punktu końcowego w pliku konfiguracji klienta:
<endpoint name="MyMexEndpoint" address="http://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
W metodzie Main() klienta utwórz nowe MetadataExchangeClient wystąpienie, ustaw jego ResolveMetadataReferences właściwość na
true
, wywołaj GetMetadata metodę , a następnie wykonaj iterację po kolekcji zwróconych metadanych: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());
Konfigurowanie według kodu
WSHttpBinding Utwórz wystąpienie powiązania:
WSHttpBinding binding = new WSHttpBinding();
Utwórz ServiceHost wystąpienie:
ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);
Dodaj punkt końcowy usługi i dodaj ServiceMetadataBehavior wystąpienie:
serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, baseAddress); ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; serviceHost.Description.Behaviors.Add(smb);
Dodaj punkt końcowy wymiany metadanych, określając WSHttpBinding utworzony wcześniej:
serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);
Aby sprawdzić, czy punkt końcowy wymiany metadanych działa prawidłowo, dodaj tag punktu końcowego w pliku konfiguracji klienta:
<endpoint name="MyMexEndpoint" address="http://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
W metodzie Main() klienta utwórz nowe MetadataExchangeClient wystąpienie, ustaw ResolveMetadataReferences właściwość na
true
, wywołaj GetMetadata metodę , a następnie iteruj przez kolekcję zwróconych metadanych: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());