L'arte di lavorare con SOA e... WCF - #1

Abbiamo la necessità di implementare un client WCF che sia in grado di effettuare il download automatico dei metadati del servizio remoto e configurare un proxy che sia in grado di stabilire una comunicazione?

Utilizziamo le classi MetadataExchangeClient, MetadataSet, WsdlImporter e ServiceEndpointCollection

MetadataExchangeClient

creiamo un oggetto MetadataExchangeClient nel quale definiamo la URI del servizio remoto e specifichiamo di voler richiedere il documento WSDL di descrizione del servizio

 

 MetadataExchangeClient metadataExchange = new MetadataExchangeClient

 (new Uri("http://localhost:8000/ServizioRemoto/?wsdl"),
 MetadataExchangeClientMode.HttpGet);

 

poi creiamo un oggetto MetadataSet in cui scarichiamo i metadati utilizzando il metodo GetMetadata() della classe MetadataExchangeClient

 

 MetadataSet metadataSet = metadataExchange.GetMetadata();

 

 creiamo un oggetto WsdlImporter dal MetadataSet che contiene il documento WSDL comprensivo degli endpoints

 

 WsdlImporter importer = new WsdlImporter(metadataSet);

 

e inseriamo gli endpoints nell'apposita collection ServiceEndpointCollection mediante il metodo ImportAllEndpoints() della classe WsdlImporter

 ServiceEndpointCollection endpoints = importer.ImportAllEndpoints();

 

 infine, all'interno di un ciclo For..Each configuriamo una variabile proxy per ogni endpoint trovato

 

 foreach (ServiceEndpoint ep in endpoints)

{
 IInterfacciaServizio proxy = new ChannelFactory<IInterfacciaServizio>(ep.Binding, ep.Address).CreateChannel();
 ((IChannel) proxy).Open();
 // codice di elaborazione del servizio
 ((IChannel) proxy).Close();
 

da notare che ChannelFactory è in grado di generare il proxy basandosi in maniera identica a ciò che riflette il contratto del servizio remoto, quindi se un metodo è dichiarato sincrono l'oggetto proxy avrà la stessa identica implementazione del metodo.

 

Technorati Tag: , ,

 

posted @ lunedì 15 ottobre 2007 18:51

Print
Comments have been closed on this topic.
«aprile»
domlunmarmergiovensab
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011