Bello questo blog, parole semplici ma piene di esperienza. E' il blog di una nonna, e non è nè una battuta nè un insulto, chi lo riempie ogni giorno è una signora di ottantasei anni, della Toscana, una insegnante in pensione, che accudisce il marito malato e si sente sola, o meglio forse si sentiva sola, poi due anni fa ha iniziato a scrivere e, qualche giorno fa, è stata intervistata da Repubblica.
Andate a vedere quanti commenti, peccato che non ha un RSS attivo...forse non sa cos'è. Però è forte lo stesso. Leggetelo.
L'eredità di Nedda
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
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:
WCF ,
.NET3 ,
C#