<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Security &amp; Architecture : .NET 4</title><link>http://blogs.msdn.com/mariofontana/archive/tags/.NET+4/default.aspx</link><description>Tags: .NET 4</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>WS-Discovery enhanced</title><link>http://blogs.msdn.com/mariofontana/archive/2009/10/13/ws-discovery-enhanced.aspx</link><pubDate>Tue, 13 Oct 2009 07:23:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9906488</guid><dc:creator>mfontana</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/9906488.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=9906488</wfw:commentRss><description>&lt;p&gt;Continua la saga su WS-Discovery scritta sempre da Alessio Mannelli. Per chi si fosse perso la prima puntata può leggerla &lt;a href="http://blogs.msdn.com/mariofontana/archive/2009/07/23/understanding-ws-discovery.aspx" target="_blank"&gt;qui&lt;/a&gt;.&lt;/p&gt;  &lt;h4&gt;Recap&lt;/h4&gt;  &lt;p&gt;Ben ritrovati in questa serie di post dedicati alla specifica WS-Discovery. Nella puntata precedente abbiamo fatto conoscenza del modello, dei messaggi e delle interazioni basiche fondamento della specifica.&lt;/p&gt;  &lt;p&gt;Abilitare scenari di composizione dinamica, sia a design-time, ma soprattutto a runtime, sono il fulcro alla base della specifica.&lt;/p&gt;  &lt;p&gt;In questa nuova puntata andremo a conoscere il supporto di rete previsto in WS-Discovey, il &lt;strong&gt;Discovery Proxy&lt;/strong&gt;, come gestire il concetto degli Scopes, ed introdurremmo gli scenari applicativi che implementeremo nella prossima puntata della serie WS-Discovery.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Supporto di rete&lt;/h4&gt;  &lt;p&gt;Abbiamo già visto nella prima puntata le due modalità operative presenti in WS-Discovery, &lt;i&gt;ad-hoc&lt;/i&gt; e &lt;i&gt;managed&lt;/i&gt;. La prima si basa completamente sullo scambio di messaggi in Multicast per tutte le peculiarità di Discovery (&lt;b&gt;Hello/Bye/Probe/Match&lt;/b&gt; e relative *&lt;b&gt;Resolve&lt;/b&gt;), la seconda si basa sulla presenza di un servizio di rete, denominato Discovery Proxy, al quale inviare i messaggi di ricerca (&lt;b&gt;Probe&lt;/b&gt; e &lt;b&gt;Resolve&lt;/b&gt;).&lt;/p&gt;  &lt;p&gt;La specifica identifica le seguenti definizioni per l’invio di messaggi in multicast:&lt;/p&gt;  &lt;p&gt;· DISCOVERY_PORT: port &lt;b&gt;3702&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;· IPv4 multicast address: &lt;b&gt;239.255.255.250&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;· IPv6 multicast address: &lt;b&gt;FF02::C&lt;/b&gt; (link-local scope) &lt;/p&gt;  &lt;p&gt;I messaggi multicast devono essere inviati utilizzando &lt;a href="http://specs.xmlsoap.org/ws/2004/09/soap-over-udp/soap-over-udp.pdf" target="_blank"&gt;SOAP over UDP&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Quando la modalità operativa utilizzata è quella ad-hoc, tutti i messaggi di richiesta devono essere inviati come sopra definito, mentre tutte le risposte verranno inviate in unicast al client che ha inviato i messaggi. Per comunicare in unicast verso il client vi sono due possibilità:&lt;/p&gt;  &lt;p&gt;· Il client aggiunge un indirizzo di risposta sfruttando l’header di Addressing &lt;em&gt;ReplyTo&lt;/em&gt; .&lt;/p&gt;  &lt;p&gt;· Il server utilizza l’indirizzo IP e la porta sorgente della connessione UDP ricevuta per rispondere al client.&lt;/p&gt;  &lt;p&gt;Nella modalità operativa &lt;i&gt;managed &lt;/i&gt;il client dialoga con il Discovery Proxy in unicast, sia in richiesta che in risposta.&lt;/p&gt;  &lt;h4&gt;&amp;#160;&lt;/h4&gt;  &lt;h4&gt;Client e Discovery Proxy&lt;/h4&gt;  &lt;p&gt;Il Discovery Proxy, come già descritto, è alla base della modalità operativa cosiddetta &lt;i&gt;managed.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Un client, se non diversamente istruito, si trova normalmente in un stato nel quale non conosce Discovery Proxy; è possibile, chiaramente che riceva un Hello dal Discovery Proxy, riconoscibile da uno specifico &lt;em&gt;Service Type &lt;/em&gt;che lo contraddistingue (&lt;i&gt;d:DiscoveryProxy&lt;/i&gt;) nel qual caso modificherà radicalmente il modo con il quale invia richieste di &lt;em&gt;Probe &lt;/em&gt;e &lt;em&gt;Resolve&lt;/em&gt;, secondo il diagramma a stati sotto descritto:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoveryenhanced_116E6/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoveryenhanced_116E6/image_thumb.png" width="417" height="465" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Quindi, una volta che il client si trova a conoscere un Discovery Proxy comunicherà con lo stesso in modalità unicast, evitando quindi di congestionare la rete con messaggi in multicast.&lt;/p&gt;  &lt;p&gt;Un DiscoveryProxy, di contro, quando riceve un messaggio di &lt;em&gt;Probe &lt;/em&gt;o &lt;em&gt;Resolve &lt;/em&gt;in multicast è tenuto a spedire subito un messaggio di &lt;b&gt;Hello&lt;/b&gt; (in multicast a sua volta): questo particolare messaggio modifica lo stato dei client in modo tale che utilizzino solamente i Discovery Proxy di cui si fidano, ed ingnorino di contro i messaggi in multicast dei Target Service.&lt;/p&gt;  &lt;p&gt;A questo punto sia i Client che i Target Service indirizzeranno le loro comunicazioni (di ricerca, per il client, di connessione/disconnessione dalla rete, per i servizi) al Discovery Proxy. Eventualmente i messaggi di connessione/disconnessione (&lt;b&gt;Hello/Bye&lt;/b&gt;) potranno essere inviati ancora in multicast, da parte dei Target Service: il loro peso specifico è talmente basso, cosi come il numero di messaggi inviati, da essere praticamente trascurabili in uno scenario reale.&lt;/p&gt;  &lt;p&gt;Tra i vantaggi di avere un’infrastruttura di Discovery &lt;i&gt;managed &lt;/i&gt;vi è anche la possibilità di scavalcare il limite di utilizzo delle comunicazioni multicast (overhead di gestione del routing del protocollo fra tutti): inserire alcuni Discovery Proxy tra le varie sottoreti, e sfruttare il modello di discovery, può portare ad allargare gli orizzonti del proprio ambiente operativo.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoveryenhanced_116E6/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoveryenhanced_116E6/image_thumb_1.png" width="408" height="245" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;In questo modo i client possono trovare ed utilizzare servizi non presenti nelle loro sottoreti, senza rendere difficoltosa la gestione dell’infrastruttura.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Scopes&lt;/h4&gt;  &lt;p&gt;Come già accennato, gli &lt;em&gt;scopes, &lt;/em&gt;di seguito indicati anche come “ambiti”, possono caratterizzare un servizio nel mondo di WS-Discovery. La specifica identifica solamente i metodi specifici con i quali un Target Service deve confrontare i suoi ambiti, con quelli richiesti dal messaggio di Probe ricevuto, per rispondere, eventualmente, con un messaggio di Match (&lt;b&gt;Probe&lt;/b&gt; o &lt;b&gt;Request&lt;/b&gt;). Ripetiamo la lista dei modelli di confronto utilizzabili, per riferimento:&lt;/p&gt;  &lt;p&gt;· http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/rfc3986&lt;/p&gt;  &lt;p&gt;· &lt;a href="http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/uuid"&gt;http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/uuid&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;· &lt;a href="http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/ldap"&gt;http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/ldap&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;· &lt;a href="http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/strcmp0"&gt;http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/strcmp0&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;· &lt;a href="http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/none"&gt;http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/none&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Per maggiori informazioni sugli stessi il capitolo 5 della specifica entra nei dettagli di ogni modello.&lt;/p&gt;  &lt;h4&gt;Scenari applicativi di utilizzo di WS-Discovery &lt;/h4&gt;  &lt;p&gt;Fino a qui abbiamo praticamente visto tutti gli aspetti peculiari della specifica WS-Discovery, cerchiamo adesso di focalizzare l’utilizzo della stessa nel mondo reale, proponendo alcuni scenari che normalmente si propongono in un ambiente orientato ai servizi, e che elaboreremo nella prossima puntata:&lt;/p&gt;  &lt;p&gt;1. Ricerca a runtime di un servizio che implementa l’interfaccia che ci interessa.&lt;/p&gt;  &lt;p&gt;2. Ricerca a runtime di un servizio che, oltre ad implementare l’interfaccia richiesta, è configurato con uno scope specifico.&lt;/p&gt;  &lt;p&gt;Il primo scenario è il più frequente in ambito composizione : configurazione degli indirizzi fisici utilizzati dai servizi nei diversi “ambienti operativi” nei quali l’ applicazione verrà eseguita (sviluppo, pre-produzione, produzione e chi più ne ha più ne metta). Il vantaggio che deriva dall’utilizzo di WS-Discovery come asset fondamentale di tutti i servizi e le applicazioni è evidente: ad ogni modifica di “ambiente operativo” l’applicazione ricercherà il servizio specifico ed utilizzerà l’indirizzo recuperato a runtime per il colloquio.&lt;/p&gt;  &lt;p&gt;Chiaramente vi possono essere degli accorgimenti capaci di evitare il “dispendio” di messaggi che la ricerca di un’istanza di servizio può aggiungere all’economia del colloquio applicazione – servizio. Talvolta il peso è trascurabile, quando ad esempio il client ha un ciclo di vita molto elevato, tale per cui il peso aggiunto diventa infinitesimale rispetto al resto del peso di comunicazione; altre volte invece è necessario salvare l’indirizzo del servizio recuperato tramite utilizzo di WS-Discovery per poi riutilizzarlo al riavvio dell’applicazione. In questo modo vi è la possibilità che il servizio recuperato in precedenza non sia più “vivo”, nel qual caso si potrà procedere con una nuova interazione Probe – ProbeMatch.&lt;/p&gt;  &lt;p&gt;Il secondo scenario è il più “ambizioso” in determinati contesti. Ipotizziamo di avere alcune istanze di uno specifico servizio, distribuite in modo tale da coprire più segmenti della topologia di rete in esame. Per esempio potremmo avere un servizio locale su una macchina, un servizio su una LAN particolare , ed un servizio al centro. Tutti e tre i servizi implementano la stessa interfaccia e gestiscono gli stessi dati ma, data la loro differente collocazione geografica hanno uno SLA (service level agreement) diverso a seconda dei dati che vengono richiesti.&lt;/p&gt;  &lt;p&gt;Facciamo un esempio : il servizio locale alla mia macchina avrà lo stato completo dei dati che si generano dalla macchina stessa, il servizio interno alla LAN ha lo stato completo dei dati che si generano all’interno della LAN stessa, e per finire il servizio al centro ha lo stato completo dei dati che si generano fuori dal contesto applicativo specifico. Ogni “livello” diverso si sincronizza e coordina con gli altri tramite un ulteriore flusso dati (che non analizziamo) che rende possibile, con tempi diversi, l’allineamento dei dati su tutte le istanze del servizio ipotizzato.&lt;/p&gt;  &lt;p&gt;A questo punto l’applicazione deve capire se e come le tre diverse istanze di servizio possono aiutarlo nell’esecuzione delle sue funzioni. In alcuni casi un servizio fisicamente “vicino” al client può essere un aiuto, se non altro per il ridotto round trip di rete dell’invocazione. Altrimenti, se l’applicazione capisce di avere necessità di dati con specifico SLA può ricercare uno dei servizi specifici. &lt;/p&gt;  &lt;p&gt;Bene, l’utilizzo degli &lt;i&gt;scopes, &lt;/i&gt;in questo caso, è l’ausilio tecnico alla problematica. Ogni diversa istanza di servizio viene configurata in diversi ambiti (scopes, per l’appunto). In contesti gerarchici, come l’esempio illustrato, gli scopes possono essere definiti con una convenzione come la seguente:&lt;/p&gt;  &lt;p&gt;· Servizio al centro rende disponibile lo scope &lt;b&gt;&lt;i&gt;http://ROOT&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;· Servizio di “filiale” rende disponibile lo scope &lt;b&gt;&lt;i&gt;http://ROOT/BRANCH&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;· Servizio locale rende disponibile lo scope &lt;b&gt;&lt;i&gt;http://ROOT/BRANCH/MACHINE&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;In questo scenario si possono poi utilizzare diverse tipologie di confronto tra gli scopes: la tipologia di esatta comparazione delle stringhe, ad esempio, restituirà solo uno delle tre istanze di servizio, piuttosto che la versione RFC3986, la quale restituisce una istanza se almeno uno dei sotto livelli della risorsa richiesta è confrontabile con quello richiesto; in questo caso se chiedo lo scope ROOT, tutti e tre i servizi dell’esempio risponderanno con i loro dettagli. &lt;/p&gt;  &lt;p&gt;Tutto dipende da quali sono le necessità applicative, ma le prospettive offerte dall’infrastruttura sono molto interessanti, e flessibili.&lt;/p&gt;  &lt;h4&gt;Conclusioni &lt;/h4&gt;  &lt;p&gt;Con questo secondo post abbiamo esaurito l’overview della specifica, e definito alcuni scenari che reputo interessanti e che saranno la base del terzo ed ultimo post della serie WS-DISCOVERY. Analizzeremo l’implementazione di WS-Discovery inserito nella nuova versione del &lt;strong&gt;.Net Framework 4.0&lt;/strong&gt;, attualmente in versione Beta, e realizzeremo gli scenari proposti. Per avvantaggiarvi vi consiglio di leggere e sottoscrivere &lt;a href="http://blogs.msdn.com/discovery/"&gt;http://blogs.msdn.com/discovery/&lt;/a&gt;, ne avremo bisogno!&lt;/p&gt;  &lt;p&gt;A presto, &lt;/p&gt;  &lt;p&gt;Alessio&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9906488" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/WS-_2A00_/default.aspx">WS-*</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Architetture+applicative/default.aspx">Architetture applicative</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Specifiche+di+Base/default.aspx">Specifiche di Base</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/.NET+4/default.aspx">.NET 4</category></item><item><title>Understanding WS-Discovery</title><link>http://blogs.msdn.com/mariofontana/archive/2009/07/23/understanding-ws-discovery.aspx</link><pubDate>Thu, 23 Jul 2009 20:04:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9846596</guid><dc:creator>mfontana</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/9846596.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=9846596</wfw:commentRss><description>&lt;p&gt;Da oggi e per i prossimi mesi ogni tanto ospiterò dei post scritti da alcuni colleghi/amici di Microsoft affinchè possano raccontare un po’ della loro expertise e competenza tecnica ottenuta durante le tante attività di consulenza e di supporto sul campo. Ovviamente il tema sarà sempre inerente le architetture applicative e la sicurezza…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoverybasics_9F20/image_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoverybasics_9F20/image_thumb.png" width="68" height="70" /&gt;&lt;/a&gt;In questo post iniziamo con &lt;strong&gt;Alessio Mannelli &lt;/strong&gt;(nella foto, l’unica decente che ho trovato :-)!&amp;#160; &lt;br /&gt;Non è la prima volta che parla su questo “canale”… vi ricordate &lt;strong&gt;quell’Alessio Mannelli &lt;/strong&gt;con il quale quasi un anno fa facemmo un video &lt;a href="http://blogs.msdn.com/mariofontana/archive/2008/09/29/come-funzionano-i-security-token-services.aspx" target="_blank"&gt;dove spiegava il funzionamento dei Security Token Services&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;?? Ebbene si, è sempre lui :-) Alessio lavora nella divisione servizi in Microsoft Italia come Senior Developer ed oramai ha un pluriennale esperienza di &lt;strong&gt;&lt;u&gt;implementazioni&lt;/u&gt;&lt;/strong&gt; di soluzioni SOA nell’enterprise. &lt;/p&gt;  &lt;p&gt;Quindi, non mi dilungo ulteriormente in ciancie e passo la palla ad Alessio per la prima puntata sulla specifica &lt;em&gt;WS-Discovery&lt;/em&gt; che tra l’altro è appena &lt;a href="http://blogs.msdn.com/mariofontana/archive/2009/07/20/net-4-0-beta-1-e-ws-discovery.aspx" target="_blank"&gt;stata rettificata come standard OASIS&lt;/a&gt; ed è presente nel &lt;strong&gt;framework .NET 4.0&lt;/strong&gt;…&lt;/p&gt;  &lt;p&gt;--Mario&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;La Missione&lt;/h4&gt;  &lt;p&gt;Tra le tante specifiche che regolano il variegato mondo dei Web Services &lt;strong&gt;WS-Discovery&lt;/strong&gt; è sicuramente una delle più ambiziose: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;definire un modello standard per la localizzazione di “servizi”, un modello per essere informati quando un nuovo “servizio” viene fatto partire e quando un “servizio” viene spento. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Un modello quindi per effettuare ricerche di “servizi” e recuperarne caratteristiche specifiche come gli endpoint con i quali è possibile dialogare con gli stessi, i protocolli utilizzabili, e molto altro ancora.&lt;/p&gt;  &lt;p&gt;Il modello di Discovery è, o sta diventando, necessario in un mondo dove la “composabilità” delle applicazioni diventa asset fondamentale dell’ecosistema applicativo di una azienda; applicazioni dinamiche per loro natura che, semplicemente, è impossibile connettere a design-time oppure a deployment-time; c’è sicuramente necessità di un modello di “connessione” dinamica a runtime, un modello che valorizzi tutti gli asset di una azienda. &lt;/p&gt;  &lt;p&gt;WS-Discovery è anche un facilitatore di scenari dove trovare ed utilizzare servizi all’interno o all’esterno dell’azienda diventa sempre più difficile; strutture verticali aziendali non allineate, poca (talvolta nessuna) Governance dei programmi e progetti in corso, molti fornitori, sono tra le problematiche più classiche che portano alla proliferazione e conseguente non riutilizzo di Web Service.&lt;/p&gt;  &lt;p&gt;Per ultimo Discovery si pone l’obiettivo di abbracciare sempre più “elementi” non tradizionali di un modello di software a servizi: stampanti, device RFID, macchine fotografiche digitali, proiettori. &lt;/p&gt;  &lt;p&gt;La possibilità di utilizzare un sistema leggero, dinamico, interoperabile per la costruzione di applicazioni composte e distribuite è fondamento della specifica WS-Discovery.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Un servizio “Discoverabile”&lt;/h4&gt;  &lt;p&gt;Per la specifica &lt;a href="http://docs.oasis-open.org/ws-dd/discovery/1.1/cs-01/wsdd-discovery-1.1-spec-cs-01.pdf" target="_blank"&gt;WS-Discovery&lt;/a&gt; ogni servizio viene identificato sulla base di quattro caratteristiche fondamentali:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;- EndpointReference&lt;/b&gt; (definito in &lt;strong&gt;WS-Addressing&lt;/strong&gt;)&lt;/p&gt;  &lt;p&gt;Un indirizzo che identifichi univocamente il servizio specifico. L’indirizzo non deve essere per forza un indirizzo fisico, anzi la specifica consiglia l’utilizzo di indirizzi logici (eg. Un identificatore universale univoco, GUID, UUID)&lt;/p&gt;  &lt;p&gt;&lt;b&gt;- Types&lt;/b&gt; (definito in &lt;strong&gt;WS-Discovery&lt;/strong&gt;)&lt;/p&gt;  &lt;p&gt;Ogni servizio web implementa uno o più tipologie di &lt;em&gt;portType&lt;/em&gt;, cosi come definito dalla specifica di &lt;a href="http://www.w3.org/TR/2001/NOTE-wsdl-20010315" target="_blank"&gt;WSDL 1.1&lt;/a&gt;: la nomenclatura utilizzata è di tipo &lt;em&gt;Namespace:ServiceTypeName&lt;/em&gt; e quasi sempre viene inferita dalle specificità dei contratti implementati nei servizi.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;- Scopes&lt;/b&gt; (definito in &lt;strong&gt;WS-Discovery&lt;/strong&gt;)&lt;/p&gt;  &lt;p&gt;Ogni servizio può identificare uno o più ambiti o contesti nei quali esiste o per i quali è stato configurato.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;- XAddrs&lt;/b&gt; (definito in &lt;strong&gt;WS-Discovery&lt;/strong&gt;)&lt;/p&gt;  &lt;p&gt;Tutti gli indirizzi sui quali il servizio specifico è raggiungibile ed invocabile. Abbiamo quindi un modello per definire completamente uno specifico Servizio:&lt;/p&gt;  &lt;p&gt;EndpointReference, l’identificatore univoco&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Types, le tipologie di “contratti” che il servizio implementa &lt;/li&gt;    &lt;li&gt;Scopes, i contesti applicativi del servizio &lt;/li&gt;    &lt;li&gt;XAddrs, gli indirizzi sui quali il servizio è raggiungibile ed invocabile. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;em&gt;&amp;lt;a:EndpointReference&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;a:Address&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; uuid:98190dc2-0890-4ef8-ac9a-5940995e6119&amp;#160; &lt;br /&gt;&amp;#160; &amp;lt;/a:Address&amp;gt;       &lt;br /&gt;&amp;lt;/a:EndpointReference&amp;gt;       &lt;br /&gt;&amp;lt;d:Types&amp;gt;i:PrintBasic i:PrintAdvanced&amp;lt;/d:Types&amp;gt;       &lt;br /&gt;&amp;lt;d:Scopes&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &lt;/em&gt;&lt;a href="ldap:///ou=engineering,o=examplecom,c=us"&gt;&lt;em&gt;ldap:///ou=engineering,o=examplecom,c=us&lt;/em&gt;&lt;/a&gt;&lt;em&gt;      &lt;br /&gt;&amp;#160;&amp;#160; &lt;/em&gt;&lt;a href="ldap:///ou=floor1,ou=b42,ou=anytown,o=examplecom,c=us"&gt;&lt;em&gt;ldap:///ou=floor1,ou=b42,ou=anytown,o=examplecom,c=us&lt;/em&gt;&lt;/a&gt;&lt;em&gt;      &lt;br /&gt;&amp;#160;&amp;#160; &lt;/em&gt;&lt;a href="http://itdept/imaging/deployment/2004-12-04"&gt;&lt;em&gt;http://itdept/imaging/deployment/2004-12-04&lt;/em&gt;&lt;/a&gt;&lt;em&gt;      &lt;br /&gt;&amp;lt;/d:Scopes&amp;gt;       &lt;br /&gt;&amp;lt;d:XAddrs&amp;gt;http://prn-example/PRN42/b42-1668-a&amp;lt;/d:XAddrs&amp;gt; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;h4&gt;Il modello di Discovery&lt;/h4&gt;  &lt;p&gt;La specifica WS-Discovery definisce sei messaggi specifici:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;- Hello/Bye&lt;/b&gt; – messaggi utilizzati da un servizio per annunciare la sua presenza (Hello) o la sua “dipartita” (Bye).&lt;/p&gt;  &lt;p&gt;&lt;b&gt;- Probe/ProbeMatch&lt;/b&gt; – &lt;em&gt;Probe&lt;/em&gt; viene utilizzato per cercare uno specifico tipo di servizio, &lt;em&gt;ProbeMatch&lt;/em&gt; viene utilizzato in risposta alla richiesta.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;- Resolve/ResolveMatch&lt;/b&gt; – &lt;em&gt;Resolve&lt;/em&gt; viene utilizzato per cercare una specifica istanza di servizio, &lt;em&gt;ResolveMatch&lt;/em&gt; viene utilizzata in risposta alla richiesta.&lt;/p&gt;  &lt;h5&gt;&lt;/h5&gt;  &lt;p&gt;Lo scenario di base prevede che i servizi annuncino la loro operatività e quando possibile il loro “scollegamento” dalla rete.(chiaramente nei casi in cui un servizio si spenga per casi eccezionali, difficilmente può inviare un messaggio di &lt;b&gt;Bye&lt;/b&gt;, e la specifica non è giustamente prescrittiva in questo senso…)&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&amp;#160;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoverybasics_9F20/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoverybasics_9F20/image_thumb_1.png" width="439" height="258" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Figura 1 : Hello e Bye Messages&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In &lt;strong&gt;figura 1&lt;/strong&gt;, viene rappresentato lo scenario di base dove l’ipotetico Client riceve i messaggi di &lt;b&gt;Hello&lt;/b&gt; dai servizi WS1 e WS2 cosi come riceve il messaggio di &lt;b&gt;Bye&lt;/b&gt; dal servizio WS3, il quale nel frattempo si è scollegato dalla rete. Il Client potrà quindi utilizzare le informazioni presenti nei messaggi di protocollo per selezionare il servizio da contattare, qual’ora, chiaramente, implementi le tipologie di servizio richieste.&lt;/p&gt;  &lt;p&gt;Quando invece un Client si connette ad una rete, ed è interessato ad uno specifico servizio, può utilizzare i messaggi di protocollo &lt;b&gt;Probe&lt;/b&gt; e/o &lt;b&gt;Resolve&lt;/b&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoverybasics_9F20/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/mariofontana/WindowsLiveWriter/WSDiscoverybasics_9F20/image_thumb_2.png" width="443" height="293" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Figura 2 : Probe/Resolve e ProbeMatch/ResolveMath Messages&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In &lt;strong&gt;figura &lt;/strong&gt;2 invece il Client ricerca uno specifico servizio e solo due dei tre servizi presenti e connessi alla rete rispondo con un messaggio di &lt;em&gt;Match&lt;/em&gt;. E’ da notare che, nello scenario definito, la richiesta di &lt;em&gt;&lt;b&gt;Resolve&lt;/b&gt; &lt;/em&gt;difficilmente verrà inviata: ricordiamoci infatti che &lt;em&gt;&lt;b&gt;Resolve&lt;/b&gt; &lt;/em&gt;serve per richiedere i dati di una specifica istanza di servizio, a differenza di &lt;em&gt;&lt;b&gt;Probe&lt;/b&gt; &lt;/em&gt;che ricerca istanze generiche che implementino specifiche tipologie di servizio. In questo caso il messaggio di &lt;em&gt;&lt;b&gt;Resolve&lt;/b&gt; &lt;/em&gt;potrebbe essere utilizzato nel caso in cui, dopo aver ricevuto un &lt;b&gt;&lt;em&gt;ProbeMatch&lt;/em&gt;&lt;/b&gt; alcune informazioni specifiche (tipo gli indirizzi per il dialogo) non fossero presenti.&lt;/p&gt;  &lt;h4&gt;Le modalità operative&lt;/h4&gt;  &lt;p&gt;Le modalità operative definite dalla specifica sono la &lt;strong&gt;&lt;em&gt;“ad-hoc”&lt;/em&gt;&lt;/strong&gt; e la modalità &lt;strong&gt;“managed”&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;La modalità &lt;em&gt;“ad-hoc”&lt;/em&gt; non utilizza nessun servizio di rete né server; i messaggi di &lt;em&gt;&lt;b&gt;Hello/Bye/Probe/Resolve&lt;/b&gt; &lt;/em&gt;vengono inviati in &lt;strong&gt;multicast &lt;/strong&gt;(le relative risposte, dove necessarie, vengono inviate in modalità &lt;strong&gt;unicast &lt;/strong&gt;al client che ha effettuato la richiesta).&lt;/p&gt;  &lt;p&gt;La modalità &lt;strong&gt;&lt;em&gt;“managed” &lt;/em&gt;&lt;/strong&gt;è supportata da un servizio di rete, denominato &lt;strong&gt;Discovery Proxy&lt;/strong&gt;, che funge da accentratore dei servizi presenti nell’ambiente, e che opera per conto loro nel rispondere alle richieste. Riprenderemo il concetto di Discovery Proxy in un prossimo post, poiché merita sicuramente un approfondimento.&lt;/p&gt;  &lt;h4&gt;Conclusioni&lt;/h4&gt;  &lt;p&gt;In questo primo post abbiamo solamente scalfito la superficie della specifica WS-Discovery: vi sono tutta una serie di concetti e di peculiarità proprie della specifica che verranno riprese nella prossima puntata.&lt;/p&gt;  &lt;p&gt;Saluti,&lt;/p&gt;  &lt;p&gt;Alessio Mannelli&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9846596" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/WS-_2A00_/default.aspx">WS-*</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Architetture+applicative/default.aspx">Architetture applicative</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Specifiche+di+Base/default.aspx">Specifiche di Base</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/.NET+4/default.aspx">.NET 4</category></item><item><title>.NET 4.0 BETA 1 e WS-Discovery</title><link>http://blogs.msdn.com/mariofontana/archive/2009/07/20/net-4-0-beta-1-e-ws-discovery.aspx</link><pubDate>Mon, 20 Jul 2009 17:14:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9841637</guid><dc:creator>mfontana</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/9841637.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=9841637</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01" target="_blank"&gt;WS-Discovery&lt;/a&gt; è diventato standard OASIS come specificato &lt;a href="http://blogs.msdn.com/discovery/archive/2009/07/01/ws-discovery-is-now-an-oasis-approved-standard.aspx" target="_blank"&gt;nel blog di team&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Ma la cosa, forse, più interessante è che la BETA 1 del framework .NET 4 comprenderà già i bit della specifica OASIS!!&lt;/p&gt;  &lt;p&gt;Per maggiori informazioni su WS-Discovery e l’importanza che anche questa specifica ricopre nel mondo dei Web Services vi rimando a “tra poco” con un post dell’ amico&lt;strong&gt; Alessio Mannelli&lt;/strong&gt; sempre su questo canale !!! &lt;/p&gt;  &lt;p&gt;Stay tuned :-)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;--Mario&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9841637" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/WS-_2A00_/default.aspx">WS-*</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/.net+framework/default.aspx">.net framework</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/.NET+4/default.aspx">.NET 4</category></item><item><title>David Chappell in : Windows Workflow Foundation 4, Oslo e Dublin</title><link>http://blogs.msdn.com/mariofontana/archive/2008/10/27/david-chappell-in-windows-workflow-foundation-4-oslo-e-dublin.aspx</link><pubDate>Tue, 28 Oct 2008 00:04:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9019065</guid><dc:creator>mfontana</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mariofontana/comments/9019065.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mariofontana/commentrss.aspx?PostID=9019065</wfw:commentRss><description>&lt;p&gt;Non poteva mancare il nuovo whitepaper di &lt;strong&gt;David Chappell&lt;/strong&gt; su alcune delle novit&amp;#224; introdotte oggi al PDC...WF 4.0, Oslo e Dublin... A mio avviso non c'&amp;#232; fonte pi&amp;#249; chiara di David per introdurre queste nuove tecnologie :-)&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd200919.aspx" target="_blank"&gt;Workflows, Services and Models - A First Look at WF 4.0, &amp;quot;Dublin&amp;quot;, and &amp;quot;Oslo&amp;quot;&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img height="218" alt="" src="http://i.msdn.microsoft.com/dd200919.image002(en-us).jpg" width="302" /&gt;&lt;/p&gt;  &lt;p&gt;--Mario&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9019065" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Architetture+applicative/default.aspx">Architetture applicative</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/.NET+4/default.aspx">.NET 4</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Oslo/default.aspx">Oslo</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Windows+Azure/default.aspx">Windows Azure</category><category domain="http://blogs.msdn.com/mariofontana/archive/tags/Dublin/default.aspx">Dublin</category></item></channel></rss>