<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>WCF</title>
        <link>http://blogs.ugidotnet.org/FabioCarucci/category/3018.aspx</link>
        <description>WCF</description>
        <language>it-IT</language>
        <copyright>Fabio Carucci</copyright>
        <generator>Subtext Version 2.1.0.3</generator>
        <item>
            <title>L'arte di lavorare con SOA e... WCF - #1</title>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/10/15/88955.aspx</link>
            <description>&lt;p align="justify"&gt;&lt;font size="2" /&gt;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?&lt;/p&gt;
&lt;p align="justify"&gt;Utilizziamo le classi &lt;strong&gt;&lt;em&gt;MetadataExchangeClient, MetadataSet, WsdlImporter &lt;/em&gt;&lt;/strong&gt;e&lt;strong&gt;&lt;em&gt; ServiceEndpointCollection&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p target="_blank"&gt;&lt;img id="id" border="0" alt="MetadataExchangeClient" width="980" height="335" src="http://images.fabiocarucci.it/MetadataExchangeClient_ETC_thumb.jpg" /&gt; &lt;/p&gt;
&lt;p align="justify"&gt;creiamo un oggetto &lt;em&gt;MetadataExchangeClient&lt;/em&gt; nel quale definiamo la URI del servizio remoto e specifichiamo di voler richiedere il documento WSDL di descrizione del servizio&lt;/p&gt;
&lt;p align="justify"&gt; &lt;/p&gt;
&lt;p align="justify"&gt; MetadataExchangeClient metadataExchange = &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; MetadataExchangeClient&lt;/p&gt;
&lt;pre&gt; (&lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; Uri("&lt;span style="COLOR: #8b0000"&gt;http://localhost:8000/ServizioRemoto/?wsdl&lt;/span&gt;"),&lt;/pre&gt;
&lt;pre&gt; MetadataExchangeClientMode.HttpGet);&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p align="justify"&gt;poi creiamo un oggetto &lt;em&gt;MetadataSet&lt;/em&gt; in cui scarichiamo i metadati utilizzando il metodo &lt;em&gt;GetMetadata&lt;/em&gt;() della classe &lt;em&gt;MetadataExchangeClient&lt;/em&gt;&lt;/p&gt;
&lt;p align="justify"&gt; &lt;/p&gt;
&lt;p&gt; MetadataSet metadataSet = metadataExchange.GetMetadata();&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p align="justify"&gt; creiamo un oggetto &lt;em&gt;WsdlImporter&lt;/em&gt; dal &lt;em&gt;MetadataSet&lt;/em&gt; che contiene il documento WSDL comprensivo degli endpoints&lt;/p&gt;
&lt;p align="justify"&gt; &lt;/p&gt;
&lt;p&gt; WsdlImporter importer = &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; WsdlImporter(metadataSet);&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p align="justify"&gt;e inseriamo gli endpoints nell'apposita collection &lt;em&gt;ServiceEndpointCollection&lt;/em&gt; mediante il metodo &lt;em&gt;ImportAllEndpoints&lt;/em&gt;() della classe &lt;em&gt;WsdlImporter&lt;/em&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;em /&gt;&lt;/p&gt;
&lt;p&gt; ServiceEndpointCollection endpoints = importer.ImportAllEndpoints();&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p align="justify"&gt; infine, all'interno di un ciclo For..Each configuriamo una variabile proxy per ogni endpoint trovato&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;span style="COLOR: #0000ff"&gt;foreach&lt;/span&gt; (ServiceEndpoint ep &lt;span style="COLOR: #0000ff"&gt;in&lt;/span&gt; endpoints)&lt;/p&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre&gt; IInterfacciaServizio proxy = &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; ChannelFactory&amp;lt;IInterfacciaServizio&amp;gt;(ep.Binding, ep.Address).CreateChannel();&lt;/pre&gt;
&lt;pre&gt; ((IChannel) proxy).Open();&lt;/pre&gt;
&lt;pre&gt;&lt;span style="COLOR: #008000"&gt; // codice di elaborazione del servizio&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt; ((IChannel) proxy).Close();&lt;/pre&gt;
&lt;pre&gt;} &lt;/pre&gt;
&lt;pre&gt; &lt;/pre&gt;
&lt;p align="justify"&gt;da notare che &lt;em&gt;ChannelFactory&lt;/em&gt; è 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.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-TOP: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:935eff4c-a599-4367-9423-bcc19c063d61" class="wlWriterEditableSmartContent" contenteditable="false"&gt;Technorati Tag: &lt;a rel="tag" href="http://technorati.com/tags/WCF/"&gt;WCF&lt;/a&gt; , &lt;a rel="tag" href="http://technorati.com/tags/.NET3/"&gt;.NET3&lt;/a&gt; , &lt;a rel="tag" href="http://technorati.com/tags/C#/"&gt;C#&lt;/a&gt; &lt;/div&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/88955.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/10/15/88955.aspx</guid>
            <pubDate>Mon, 15 Oct 2007 13:51:50 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/88955.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/10/15/88955.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/88955.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/88955.aspx</trackback:ping>
        </item>
    </channel>
</rss>
