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 Esempio della guida introduttiva.
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 nella raccolta di metadati restituita:
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 nella raccolta di metadati restituita:
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
Attività
Comportamento di pubblicazione dei metadati
Recupero di metadati
Concetti
Metadata
Pubblicazione di metadati
Pubblicazione di endpoint dei metadati