Vorgehensweise: Konfigurieren einer benutzerdefinierten WS-Metadata Exchange-Bindung
In diesem Artikel wird erläutert, wie Sie eine benutzerdefinierte WS-Metadata-Austauschbindung konfigurieren. Windows Communication Foundation (WCF) enthält vier systemdefinierte Metadatenbindungen, Sie können Jedoch Metadaten mit jeder gewünschten Bindung veröffentlichen. In diesem Artikel wird gezeigt, wie Metadaten mithilfe der wsHttpBinding
veröffentlicht werden. Diese Bindung ermöglicht es Ihnen, Metadaten auf eine sichere Weise verfügbar zu machen. Der Code in diesem Artikel basiert auf den Ersten Schritten.
Verwenden einer Konfigurationsdatei
Fügen Sie in der Konfigurationsdatei des Dienstes ein Dienstverhalten hinzu, das das
serviceMetadata
-Tag enthält:<behaviors> <serviceBehaviors> <behavior name="CalculatorServiceBehavior"> <serviceMetadata httpGetEnabled="True"/> </behavior> </serviceBehaviors> </behaviors>
Fügen Sie dem Dienst-Tag ein
behaviorConfiguration
-Attribut hinzu, das auf dieses neue Verhalten verweist:<service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior" />
Fügen Sie einen Metadatenendpunkt hinzu, der MEX als Adresse,
wsHttpBinding
als Bindung und IMetadataExchange als Vertrag angibt:<endpoint address="mex" binding="wsHttpBinding" contract="IMetadataExchange" />
Fügen Sie ein Endpunkt-Tag in der Client-Konfigurationsdatei hinzu, um zu überprüfen, ob der Metadatenaustausch-Endpunkt ordnungsgemäß funktioniert:
<endpoint name="MyMexEndpoint" address="http://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
Erstellen Sie in der Main()-Methode des Clients eine neue MetadataExchangeClient-Instanz, legen Sie ihre ResolveMetadataReferences-Eigenschaft auf
true
fest, rufen Sie GetMetadata auf, und durchlaufen Sie dann die Auflistung zurückgegebener Metadaten: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());
Konfigurieren durch Code
Erstellen Sie eine WSHttpBinding-Bindungsinstanz:
WSHttpBinding binding = new WSHttpBinding();
Erstellen Sie eine ServiceHost-Instanz:
ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);
Fügen Sie einen Dienstendpunkt hinzu, und fügen Sie eine ServiceMetadataBehavior-Instanz hinzu:
serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, baseAddress); ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; serviceHost.Description.Behaviors.Add(smb);
Fügen Sie einen Metadatenaustausch-Endpunkt hinzu, der die zuvor erstellte WSHttpBinding angibt:
serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);
Fügen Sie ein Endpunkt-Tag in der Client-Konfigurationsdatei hinzu, um zu überprüfen, ob der Metadatenaustausch-Endpunkt ordnungsgemäß funktioniert:
<endpoint name="MyMexEndpoint" address="http://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
Erstellen Sie in der Main()-Methode des Clients eine neue MetadataExchangeClient-Instanz, legen Sie die ResolveMetadataReferences-Eigenschaft auf
true
fest, rufen Sie GetMetadata auf, und durchlaufen Sie dann die Auflistung zurückgegebener Metadaten: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());