Postupy: Konfigurace vlastních vazeb protokolu WS-Metadata Exchange
Tento článek vysvětluje, jak nakonfigurovat vlastní vazbu výměny metadat WS-Metadata. Windows Communication Foundation (WCF) obsahuje čtyři vazby metadat definované systémem, ale metadata můžete publikovat pomocí libovolné vazby. Tento článek ukazuje, jak publikovat metadata pomocí .wsHttpBinding
Tato vazba umožňuje bezpečně vystavit metadata. Kód v tomto článku je založený na začínáme.
Použití konfiguračního souboru
V konfiguračním souboru služby přidejte chování služby, které obsahuje
serviceMetadata
značku:<behaviors> <serviceBehaviors> <behavior name="CalculatorServiceBehavior"> <serviceMetadata httpGetEnabled="True"/> </behavior> </serviceBehaviors> </behaviors>
behaviorConfiguration
Přidejte atribut do značky služby, který odkazuje na toto nové chování:<service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior" />
Přidejte koncový bod metadat určující mex jako adresu,
wsHttpBinding
jako vazbu a IMetadataExchange jako kontrakt:<endpoint address="mex" binding="wsHttpBinding" contract="IMetadataExchange" />
Pokud chcete ověřit, že koncový bod výměny metadat funguje správně, přidejte do konfiguračního souboru klienta značku koncového bodu:
<endpoint name="MyMexEndpoint" address="http://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
V metodě Main() klienta vytvořte novou MetadataExchangeClient instanci, nastavte její ResolveMetadataReferences vlastnost na
true
, volání GetMetadata a následné iterace prostřednictvím kolekce vrácených metadat: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());
Konfigurace podle kódu
Vytvoření instance vazby WSHttpBinding :
WSHttpBinding binding = new WSHttpBinding();
Vytvoření ServiceHost instance:
ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);
Přidejte koncový bod služby a přidejte ServiceMetadataBehavior instanci:
serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, baseAddress); ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; serviceHost.Description.Behaviors.Add(smb);
Přidejte koncový bod výměny metadat, který WSHttpBinding určuje dříve vytvořený:
serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);
Pokud chcete ověřit, že koncový bod výměny metadat funguje správně, přidejte do konfiguračního souboru klienta značku koncového bodu:
<endpoint name="MyMexEndpoint" address="http://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
V metodě Main() klienta vytvořte novou MetadataExchangeClient instanci, nastavte ResolveMetadataReferences vlastnost na
true
, volání GetMetadata a iterace prostřednictvím kolekce vrácených metadat: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());