Procedura: configurare un'associazione WS-Metadata Exchange personalizzata
In questo argomento viene illustrato come configurare un'associazione WS-Metadata Exchange personalizzata. Windows Communication Foundation (WCF) include quattro associazioni di metadati definite dal sistema, ma è possibile pubblicare metadati utilizzando qualsiasi associazione desiderata. In questo argomento viene illustrato come pubblicare metadati utilizzando wsHttpBinding. Questa associazione offre la possibilità di esporre i metadati in modo sicuro. Il codice riportato in questo articolo si basa su Getting Started Sample.
Utilizzo di un file di configurazione
Nel file di configurazione del servizio aggiungere un comportamento del servizio che contenga il tag serviceMetadata:
<behaviors> <serviceBehaviors> <behavior name="CalculatorServiceBehavior"> <serviceMetadata httpGetEnabled="True"/> </behavior> </serviceBehaviors> </behaviors>
Aggiungere un attributo behaviorConfiguration al tag del servizio che fa riferimento a questo nuovo comportamento:
<service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior">
Aggiungere un endpoint dei metadati specificando mex come indirizzo, wsHttpBinding come associazione e IMetadataExchange come contratto:
<endpoint address="mex" binding="wsHttpBinding" contract="IMetadataExchange" />
Per verificare che l'endpoint dello scambio di metadati stia funzionando correttamente, aggiungere un tag dell'endpoint nel file di configurazione client:
<endpoint name="MyMexEndpoint" address="https://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
Nel metodo Main() del client creare una nuova istanza di MetadataExchangeClient, impostare la proprietà ResolveMetadataReferences su true, chiamare GetMetadata e quindi eseguire un'iterazione nell'insieme di metadati restituito:
string mexAddress = "https://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());
Configurazione mediante codice
Creare un'istanza dell'associazione WsHttpBinding:
WSHttpBinding binding = new WSHttpBinding();
Creare un'istanza di ServiceHost:
ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);
Aggiungere un endpoint di servizio e un'istanza di ServiceMetadataBehavior:
serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, baseAddress); ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; serviceHost.Description.Behaviors.Add(smb);
Aggiungere un endpoint dello scambio di metadati, specificando la classe WSHttpBinding creata in precedenza:
serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);
Per verificare che l'endpoint dello scambio di metadati stia funzionando correttamente, aggiungere un tag dell'endpoint nel file di configurazione client:
<endpoint name="MyMexEndpoint" address="https://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
Nel metodo Main() del client creare una nuova istanza di MetadataExchangeClient, impostare la proprietà ResolveMetadataReferences su true, chiamare GetMetadata e quindi eseguire un'iterazione nell'insieme di metadati restituito:
string mexAddress = "https://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());
Vedere anche
Concetti
Metadata
Pubblicazione di metadati
Pubblicazione di endpoint dei metadati