<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8323071861123024882</id><updated>2012-02-11T12:18:57.989+01:00</updated><category term='ArcGIS API Silverlight'/><category term='YouTube API location'/><category term='CBM'/><category term='ReleaseComObject'/><category term='SOE'/><category term='singleton'/><category term='geojson'/><category term='IFeatureClassLoad'/><category term='arcgis.com'/><category term='case studies'/><category term='c#'/><category term='stackoverflow'/><category term='addin'/><category term='add-in ArcGIS'/><category term='Deferreds'/><category term='adf .net'/><category term='tokens'/><category term='wms'/><category term='StreetView Google'/><category term='geodatabase enterprise'/><category term='funzioni hash'/><category term='video'/><category term='fxcop'/><category term='LINQ to SQL'/><category term='MD5'/><category term='arcgis API client 2.0 beta'/><category term='aws'/><category term='msd'/><category term='compress'/><category term='ArcGIS API Flex 1.2'/><category term='xml'/><category term='ComReleaser'/><category term='google maps'/><category term='virtual earth'/><category term='polimorfismo'/><category term='IGeometry'/><category term='Design Patterns GoF'/><category term='Clementini Felice'/><category term='.NET 3.0'/><category term='cloud'/><category term='regular expression'/><category term='GDBT'/><category term='ArcGIS API javascript'/><category term='rest'/><category term='ArcGIS API JavaScript 1.5'/><category term='Json'/><category term='dojo'/><category term='SCL'/><category term='LoadOnlyMode'/><category term='geocoding Google'/><category term='result map service'/><category term='ArcObjects'/><category term='network analyst'/><category term='reconcile'/><category term='maptips'/><category term='ssl'/><category term='Realtà aumentata'/><category term='architettura'/><category term='stylecop'/><category term='GPolyline'/><category term='EMAB'/><category term='archiving arcgis'/><category term='Multithreading'/><category term='javascript currying'/><category term='Accelerator IE8'/><category term='postback manager'/><category term='network analysis'/><category term='yahoo'/><category term='LINQPad'/><category term='amazon web services'/><category term='rilascio risorse'/><category term='Geoprocessing'/><category term='web service pooled'/><category term='ec2'/><category term='arcgis 10'/><category term='dispose'/><category term='SQL Server'/><category term='Silverlight Control streetside'/><category term='layar'/><category term='benchmark'/><category term='arcpy geoprocessing'/><category term='routetask'/><category term='server context empty'/><category term='Type Inference'/><category term='ArcGIS API Google Maps'/><category term='silverlight ar toolkit'/><category term='pattern NVI'/><category term='IDisposable'/><category term='augmented reality'/><category term='mapviewer'/><category term='arcgis server'/><category term='unit test'/><category term='shape comparison language'/><category term='LINQ to Objects'/><category term='arcgisonline'/><category term='ArcEngine'/><category term='dojox.data.QueryReadStore'/><category term='FinalReleaseComObject'/><category term='DataContractJsonSerializer'/><category term='arcgis desktop'/><category term='touch'/><category term='wcf'/><category term='jsonp'/><category term='gis enterprise'/><category term='dependency injection'/><category term='Lambda Extension method'/><category term='System.__COMObject'/><category term='visual studio 2008'/><category term='IRelationalOperator'/><category term='geocoding'/><category term='soap'/><category term='SQL Server 2008'/><category term='ArcGIS API virtual earth 1.4'/><category term='logger'/><category term='Reporting services'/><category term='engine'/><category term='rcw'/><category term='version'/><category term='web services'/><category term='post'/><category term='autocomplete'/><category term='thread'/><category term='ESRI Developer Summit 2010'/><category term='autosuggest'/><category term='versioning'/><category term='geocode'/><category term='jquery'/><category term='loop closure'/><category term='GPMessage'/><category term='SOE debug'/><category term='Bing Maps'/><category term='Linq'/><category term='activator'/><category term='generics'/><category term='arcgis'/><category term='log4net'/><category term='https'/><category term='GC'/><category term='routing'/><category term='birdeye'/><category term='arcpad'/><category term='checksum'/><title type='text'>NicoGis - Sviluppare in ambiente ArcGIS...</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nicogis.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nicogis.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ing. Domenico Ciavarella</name><uri>http://www.blogger.com/profile/11116200904149667988</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-hc7A5NAVWEU/TbxOnHjqZPI/AAAAAAAAALM/8Mvi5N0jizs/s220/001.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>82</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8323071861123024882.post-8014249831670544933</id><published>2012-01-15T19:40:00.005+01:00</published><updated>2012-01-28T17:10:51.053+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arcgis.com'/><title type='text'>Shapefile (il vecchio) e ArcGIS.com (il nuovo)</title><content type='html'>Come avete potuto leggere o avete già provato,&amp;nbsp; è possibile aggiungere feature alla nostra mappa in ArcGIS.com tramite file di testo con separatori,&amp;nbsp;file GPS (.gpx) e shapefile (compresso in un file zip).&lt;br /&gt;Il visualizzatore di mappa di ArcGIS.com&amp;nbsp;aggiunge informazioni di localizzazione,&amp;nbsp;visualizza feature&amp;nbsp;sulla mappa per ogni&amp;nbsp;dato nel file e memorizza&amp;nbsp;l'informazione nella mappa web come un layer.&lt;br /&gt;Un&amp;nbsp;volta aggiunta la feature class dal file&amp;nbsp;nella mappa, è possibile modificare le proprietà del layer che è stato creato. &amp;nbsp;Ad esempio è possibile configurare la finestra di pop-up, modificare i simboli, impostare l'intervallo di visibilità, abilitare la modifica della feature class e rimuovere il pop-up.&amp;nbsp;Per modificare le proprietà del layer cliccare su &lt;b&gt;Details,&lt;/b&gt;&amp;nbsp;poi su &lt;b&gt;Contents&lt;/b&gt; e infine sulla freccia a destra del nome del layer.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-UDM0DP-u5zU/TxHG78KUpZI/AAAAAAAAAWY/vRpNhhvAq5A/s1600/properties.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-UDM0DP-u5zU/TxHG78KUpZI/AAAAAAAAAWY/vRpNhhvAq5A/s1600/properties.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Per aggiungere un file alla mappa, aprire il visualizzatore di mappa di ArcGIS.com e cliccare su &lt;b&gt;Add, &lt;/b&gt;scegliere &lt;b&gt;Add Layer from File,&lt;/b&gt; selezionare il file sul computer e cliccare su &lt;b&gt;Import Layer. &lt;/b&gt;Aggiungendo uno shapefile, scegliere di generalizzare le feature per la visualizzazione sul web (è raccomandata) o prendere le feature originali. Il layer è memorizzato con la mappa. Per browser che supportano il drag and drop dell' HTML5, è possibile trascinare&amp;nbsp;il file direttamente sulla mappa.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-MP6v7K0zqfc/TxHG4qI4CCI/AAAAAAAAAWI/w8zFypdMFgY/s1600/loadShape.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-MP6v7K0zqfc/TxHG4qI4CCI/AAAAAAAAAWI/w8zFypdMFgY/s1600/loadShape.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In questo caso, aggiungiamo lo shapefile&amp;nbsp;delle principali autostrade degli Stati Uniti.&lt;br /&gt;Il nostro caro vecchio shapefile -&amp;nbsp;come sapete - è un formato vettoriale che memorizza posizione, geometria ed attributi delle feature geografiche. E' memorizzato fisicamente mediante un insieme di file che contengono una feature class. Gli shapefile spesso contengono molte geometrie con associati dati e storicamente sono stati utilizzati dalle applicazioni GIS Desktop come ArcGIS Desktop e ArcGIS Explorer. Però, se abbiamo pochi dati nello shapefile -&amp;nbsp;generamente non più 1000 feature -&amp;nbsp;è possibile renderlo disponibile ad altri facendolo visualizzare attraverso il web con un browser: aggiungendolo tramite un file zip contenente i file fisici che memorizzano lo shapefile (file .shp, .shx, .dbf e .prj) sulla mappa che si crea con il visualizzatore di mappa di ArcGIS.com. Quando aggiungiamo uno shapefile, il visualizzatore di mappa di ArcGIS.com lo&amp;nbsp;serializza in formato json ESRI per essere letto velocemente e visualizzato dai&amp;nbsp;web client. Chiaramente, così facendo, siamo in un'ottica file server e quindi una soluzione non scalabile rispetto ad un feature service. Per aiutare ulteriormente le prestazioni di visualizzazione, è possibile scegliere di&amp;nbsp;generalizzare&amp;nbsp; le feature dello shapefile. La generalizzazione riduce le dimensioni &amp;nbsp;dello shapefile semplificando le feature ed è spesso adatto per dati da rappresentare a piccole scale. Sì può generalizzare utilizzando applicazioni desktop come ArcGIS Desktop che ArcGIS.com quando aggiungiamo il file alla mappa (vedi immagine precedente).&lt;br /&gt;La generalizzazione di ArcGIS.com riduce la risoluzione del layer&amp;nbsp;shapefile e&amp;nbsp;"spunta" la precisione delle feature. Per maggiori dettagli vedere &lt;a href="http://blogs.esri.com/Dev/blogs/arcgisserver/archive/2011/06/13/Feature-layers-can-generalize-geometries-on-the-fly.aspx"&gt;qui&lt;/a&gt;.&amp;nbsp;&amp;nbsp;La generalizzazione adottata&amp;nbsp;dovrebbe essere&amp;nbsp;un buon compromesso tra mantenere l'informazione e l'accuratezza di visualizzazione delle feature, mentre riduce soprattutto la dimensione dei dati e consente pertanto una veloce visualizzazione sulla mappa. La logica utilizzata da ArcGIS.com è calcolare al volo la dimensione&amp;nbsp;in unità di mappa del pixel&amp;nbsp;nella corrente visualizzazione e impostare questa misura come &lt;strong&gt;maxAllowableOffset, &lt;/strong&gt;poichè il dettaglio è inutile al di sotto del pixel, rimuovendo quindi inutili vertici. Chiaramente se il feature layer è impostato come modificabile, la generalizzazione non verrà applicata perchè la gestione sarebbe un po' più complessa. Shapefile con più di 1000 feature o in alcuni casi anche con meno feature (visualizzazione di errori in fase di caricamento)&amp;nbsp;non possono essere aggiunti nella mappa perchè non adatti ad una visualizzazione&amp;nbsp;veloce su&amp;nbsp;web. L'alternativa è creare un feature service con ArcGIS Server o in futuro con 10.1 sottoscrivendo una subscription ad ArcGIS Online per creare feature service.&lt;br /&gt;&lt;br /&gt;Una volta caricato il layer possiamo rinominarlo con &lt;b&gt;Rename&lt;/b&gt; utilizzando la finestra di pop-up:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-g4oqStDXAks/TxK2DVeAS3I/AAAAAAAAAXI/y3U-f0xmOI0/s1600/rename.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-g4oqStDXAks/TxK2DVeAS3I/AAAAAAAAAXI/y3U-f0xmOI0/s1600/rename.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Una volta caricato possiamo, come detto precedentemente, modificare i simboli. In questo esempio ho impostato ad &lt;span class="uicontrol"&gt;&lt;b&gt;Unique Values&lt;/b&gt;:&amp;nbsp;in pratica si visualizza ogni feature utilizzando una particolare&amp;nbsp;caratteristica che la identifica.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-mTpbaYrn-jI/TxKz6ADNPoI/AAAAAAAAAXA/lh8xA3jUmPU/s1600/simbology.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-mTpbaYrn-jI/TxKz6ADNPoI/AAAAAAAAAXA/lh8xA3jUmPU/s1600/simbology.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;A questo punto, la nostra mappa è pronta per essere salvata. Correntemente quindi&amp;nbsp;fa riferimento ad&amp;nbsp;una basemap, ad uno shapefile (operational layer) che abbiamo caricato ed alle impostazioni fatte sul layer basato sullo shape (unique values, label ecc.).&amp;nbsp;&amp;nbsp;Per la mappa sono presenti comunque anche altre informazioni che possiamo memorizzare, ad esempio i bookmark.&lt;br /&gt;&lt;br /&gt;Salviamo la mappa con il pulsante &lt;b&gt;Save &lt;/b&gt;ed inseriamo Title, Tags, Summary e indichiamo in quale cartella salvare la definizione della mappa (le cartelle possono essere create in ArcGIS.com per poter suddividere le proprie mappe, applicazioni, layer ecc.). I tag permettono ad altri di cercare la tua mappa mediante le parole chiave che sono state inserite (separare più tag mediante una&amp;nbsp;virgola) mentre il summary è una descrizione&amp;nbsp;per tua mappa.&amp;nbsp;Con &lt;b&gt;Save As &lt;/b&gt;faremo invece una copia della definizione della mappa.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-OBnQu15mrro/TxK3AWc_iJI/AAAAAAAAAXQ/L51LN3VcI5w/s1600/salvaMappa.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-OBnQu15mrro/TxK3AWc_iJI/AAAAAAAAAXQ/L51LN3VcI5w/s1600/salvaMappa.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Una volta salvata la mappa, possiamo decidere&amp;nbsp;se condividerla con altre persone.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-VsUlXeI8-WU/TxK51yvwP4I/AAAAAAAAAXY/JJsvZSXGKzo/s1600/mappaagol.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-VsUlXeI8-WU/TxK51yvwP4I/AAAAAAAAAXY/JJsvZSXGKzo/s1600/mappaagol.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Cliccando su &lt;b&gt;Share &lt;/b&gt;possiamo condividere con tutti o uno o più gruppi ai quali ci siamo uniti. Per unirsi ad un gruppo vedi il seguente video:&lt;br /&gt;&lt;div align="center"&gt;&lt;iframe frameborder="0" height="270" scrolling="no" src="http://videoembed.esri.com/iframe/560/000000/width/480/0/00:00:00" width="480"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;Anche noi possiamo crearci il nostro gruppo ed invitare altri utenti ad unirsi:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;iframe frameborder="0" height="270" scrolling="no" src="http://video.arcgis.com/iframe/251/000000/width/480/0/00:00:00" width="480"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;Una volta salvata la mappa è possibile anche modificare le feature del layer.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-BA3PCOm3UTU/TxK-N5-p_FI/AAAAAAAAAXg/jt7HNe0yNgU/s1600/edit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-BA3PCOm3UTU/TxK-N5-p_FI/AAAAAAAAAXg/jt7HNe0yNgU/s1600/edit.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Per chi è la prima volta che si collega ad ArcGIS.com ricordo che occorre avere un ESRI Global Account (cliccare su&lt;b&gt; Create an Account&lt;/b&gt;) e successivamente bisogna registrare l'account in ArcGIS.com (cliccare su &lt;b&gt;Register your ESRI Global Account&lt;/b&gt;)&amp;nbsp;. Il link per la registrazione è: &lt;a href="https://www.arcgis.com/home/signin.html"&gt;https://www.arcgis.com/home/signin.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In questo esempio che abbiamo visto tutte le informazioni sono memorizzate su ArcGIS.com (mappa e dati). Vediamo un po' più nel dettaglio come sono memorizzate.&lt;br /&gt;&lt;br /&gt;Alla nostra mappa è associato un &lt;a href="http://en.wikipedia.org/wiki/Universally_unique_identifier"&gt;UUID&lt;/a&gt; (identificatore univoco universale). In questo caso per recuperare il nostro item passiamo l'&lt;a href="http://en.wikipedia.org/wiki/Universally_unique_identifier"&gt;UUID&lt;/a&gt; della mappa (cioè l'ID della mappa)&amp;nbsp;creata: &lt;span style="color: #0066cc;"&gt;b4ad815cb1ec46dcac03ecd8a31c82ff&lt;/span&gt;&lt;br /&gt;&lt;a href="https://www.arcgis.com/home/item.html?id=b4ad815cb1ec46dcac03ecd8a31c82ff"&gt;https://www.arcgis.com/home/item.html?id=b4ad815cb1ec46dcac03ecd8a31c82ff&lt;/a&gt;.&lt;br /&gt;Se desideriamo visualizzare la mappa nel viewer messo a disposizione di ArcGIS.com possiamo semplicemente passare l'&lt;a href="http://en.wikipedia.org/wiki/Universally_unique_identifier"&gt;UUID&lt;/a&gt; al parametro &lt;i&gt;webmap.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.arcgis.com/home/webmap/viewer.html?webmap=b4ad815cb1ec46dcac03ecd8a31c82ff"&gt;http://www.arcgis.com/home/webmap/viewer.html?webmap=b4ad815cb1ec46dcac03ecd8a31c82ff&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-UohDSeSaQmQ/TxL-9ZTyKaI/AAAAAAAAAXo/fw3YD28OOsc/s1600/Viewerdefault.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-UohDSeSaQmQ/TxL-9ZTyKaI/AAAAAAAAAXo/fw3YD28OOsc/s1600/Viewerdefault.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Come parametri possiamo passare anche:&lt;br /&gt;- center&lt;br /&gt;- level&lt;br /&gt;- extent&lt;br /&gt;- baseUrl&lt;br /&gt;- url&lt;br /&gt;- displayslider&lt;br /&gt;- displayscalebar&lt;br /&gt;- displaylegend&lt;br /&gt;- displaydetails&lt;br /&gt;- displaysearch&lt;br /&gt;ecc.&lt;br /&gt;Per maggiori dettagli sui parametri che si possono passare vedere &lt;a href="http://help.arcgis.com/en/arcgisonline/help/010q/010q00000064000000.htm"&gt;qui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Per creare una&amp;nbsp;web application possiamo direttamente da ArcGIS.com cliccare su &lt;b&gt;Share.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-U5vyEDPrp6w/TxMAspijnzI/AAAAAAAAAXw/Hbrz5-82s7A/s1600/shareMap.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-U5vyEDPrp6w/TxMAspijnzI/AAAAAAAAAXw/Hbrz5-82s7A/s1600/shareMap.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Con &lt;b&gt;Link to this map&lt;/b&gt; possiamo condividere il link alla mappa mediante un &lt;a href="http://en.wikipedia.org/wiki/URL_shortening"&gt;URL shortening&lt;/a&gt; ad esempio in Twitter e Facebook.&lt;br /&gt;&lt;br /&gt;Oppure possiamo inglobarla nel nostro sito, blog,&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Web_Content_Management_System"&gt;WCMS&lt;/a&gt; ecc. mediante il tag &lt;a href="http://www.w3schools.com/tags/tag_iframe.asp"&gt;IFRAME&lt;/a&gt;. &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-W5qFFunSzt0/TxMDyEjgaFI/AAAAAAAAAX4/gn2PjDHXzOE/s1600/embed.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-W5qFFunSzt0/TxMDyEjgaFI/AAAAAAAAAX4/gn2PjDHXzOE/s1600/embed.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Mentre cliccando su &lt;b&gt;Make a Web Application &lt;/b&gt;possiamo creare, utilizzando uno dei tanti template, un'applicazione in javascript utilizzando le&amp;nbsp;&lt;a href="http://help.arcgis.com/en/webapi/javascript/arcgis/"&gt;API ESRI javascript&lt;/a&gt;. Una volta selezionato il template, ArcGIS.com&amp;nbsp;imposterà automaticamente i riferimenti della mappa nel codice javascript&amp;nbsp;- se decidiamo di pubblicarla -&amp;nbsp;salvandola&amp;nbsp;su ArcGIS.com. Per identificare l'applicazione web ArcGIS.com crea un altro UUID: &lt;span style="color: #0066cc;"&gt;ced2d4e31f9b4afd9d644bb1770b8041.&lt;/span&gt;&lt;br /&gt;&lt;a href="http://studioat.maps.arcgis.com/apps/OnePane/chrome/index.html?appid=ced2d4e31f9b4afd9d644bb1770b8041&amp;amp;webmap=b4ad815cb1ec46dcac03ecd8a31c82ff"&gt;http://studioat.maps.arcgis.com/apps/OnePane/chrome/index.html?appid=ced2d4e31f9b4afd9d644bb1770b8041&amp;amp;webmap=b4ad815cb1ec46dcac03ecd8a31c82ff&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;L'alternativa è pubblicarla sul nostro server scaricando il template e cliccando su &lt;b&gt;Download.&lt;/b&gt; In questo caso configureremo manualmente l'id della mappa nel template.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/--148gyEyVrU/TxMIRcXvTZI/AAAAAAAAAYA/-BzSZm9yB7Q/s1600/MakeWebApplication.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/--148gyEyVrU/TxMIRcXvTZI/AAAAAAAAAYA/-BzSZm9yB7Q/s1600/MakeWebApplication.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Possiamo anche creare una webmap anche direttamente da un json senza passare da ArcGIS.com.&lt;br /&gt;&lt;a href="http://help.arcgis.com/en/webapi/javascript/arcgis/help/jssamples/ags_createwebmapitem.html"&gt;Qui&lt;/a&gt; possiamo vederne un esempio (utilizzo di&amp;nbsp;&lt;span style="font-family: Courier New;"&gt;&lt;i&gt;esri.arcgis.utils.createWebMap&lt;/i&gt;)&lt;i&gt;.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Qui possiamo vedere la definizione della mappa (l'url base è &lt;a href="http://www.arcgis.com/sharing/content/items"&gt;http://www.arcgis.com/sharing/content/items&lt;/a&gt;)&amp;nbsp;:&lt;br /&gt;&lt;a href="http://www.arcgis.com/sharing/content/items/b4ad815cb1ec46dcac03ecd8a31c82ff?f=pjson"&gt;http://www.arcgis.com/sharing/content/items/b4ad815cb1ec46dcac03ecd8a31c82ff?f=pjson&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"id"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"b4ad815cb1ec46dcac03ecd8a31c82ff"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"item"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"usa_-_major_highways_1326046703296"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"itemType"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"text"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"owner"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"ciava.at"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"uploaded"&lt;/span&gt;:&amp;nbsp;1326046716000,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"modified"&lt;/span&gt;:&amp;nbsp;1326046717000,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"guid"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"name"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"title"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"USA&amp;nbsp;-&amp;nbsp;Major&amp;nbsp;highways"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"type"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"Web&amp;nbsp;Map"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"typeKeywords"&lt;/span&gt;:&amp;nbsp;[&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"Web&amp;nbsp;Map"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"Explorer&amp;nbsp;Web&amp;nbsp;Map"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"Map"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"Online&amp;nbsp;Map"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"ArcGIS&amp;nbsp;Online"&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"description"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"tags"&lt;/span&gt;:&amp;nbsp;[&lt;span style="color: #a31515;"&gt;"USA&amp;nbsp;Major&amp;nbsp;highways"&lt;/span&gt;],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"snippet"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"USA&amp;nbsp;-&amp;nbsp;Major&amp;nbsp;highways"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"thumbnail"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"thumbnail/ago_downloaded.png"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"documentation"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"extent"&lt;/span&gt;:&amp;nbsp;[&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-128.4263,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23.7584&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-65.4088,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;51.5041&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"lastModified"&lt;/span&gt;:&amp;nbsp;-1,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"spatialReference"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"accessInformation"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"licenseInfo"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"culture"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"it"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"url"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"access"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"public"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"size"&lt;/span&gt;:&amp;nbsp;806736,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"numComments"&lt;/span&gt;:&amp;nbsp;0,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"numRatings"&lt;/span&gt;:&amp;nbsp;0,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"avgRating"&lt;/span&gt;:&amp;nbsp;0,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"numViews"&lt;/span&gt;:&amp;nbsp;41&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Che possiamo 'replicare' in javascript:&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;webmap&amp;nbsp;=&amp;nbsp;{};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;webmap.item&amp;nbsp;=&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"title"&lt;/span&gt;:&lt;span style="color: #a31515;"&gt;"USA&amp;nbsp;-&amp;nbsp;Major&amp;nbsp;highways"&lt;/span&gt;,&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.....&lt;br /&gt;&amp;nbsp;&amp;nbsp;};&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;Analogamente possiamo fare con i dati della mappa:&lt;br /&gt;Qui possiamo vedere la "serializzazione" del nostro shapefile in formato json ESRI:&lt;br /&gt;&lt;a href="http://www.arcgis.com/sharing/content/items/b4ad815cb1ec46dcac03ecd8a31c82ff/data?f=pjson"&gt;http://www.arcgis.com/sharing/content/items/b4ad815cb1ec46dcac03ecd8a31c82ff/data?f=pjson&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"operationalLayers"&lt;/span&gt;:&amp;nbsp;[{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"id"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"usa_major_highways_9585"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"title"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"USA&amp;nbsp;-&amp;nbsp;Major&amp;nbsp;highways"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"featureCollection"&lt;/span&gt;:&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"showLegend"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: blue;"&gt;true&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"layers"&lt;/span&gt;:&amp;nbsp;[{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"layerDefinition"&lt;/span&gt;:&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"currentVersion"&lt;/span&gt;:&amp;nbsp;10.1,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"id"&lt;/span&gt;:&amp;nbsp;0,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"name"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"usa_major_highways"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"type"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"Feature&amp;nbsp;Layer"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"displayField"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;""&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"description"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;""&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"copyrightText"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;""&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"supportsRollbackOnFailure"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: blue;"&gt;true&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"geometryType"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"esriGeometryPolyline"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"minScale"&lt;/span&gt;:&amp;nbsp;0,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"maxScale"&lt;/span&gt;:&amp;nbsp;0,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"extent"&lt;/span&gt;:&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"xmin"&lt;/span&gt;:&amp;nbsp;-1.75985065262543E7,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"ymin"&lt;/span&gt;:&amp;nbsp;2424999.05112109,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"xmax"&lt;/span&gt;:&amp;nbsp;-7545366.07247812,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"ymax"&lt;/span&gt;:&amp;nbsp;8893656.17013185,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"spatialReference"&lt;/span&gt;:&amp;nbsp;{&lt;span style="color: #a31515;"&gt;"wkid"&lt;/span&gt;:&amp;nbsp;102100}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"drawingInfo"&lt;/span&gt;:&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"renderer"&lt;/span&gt;:&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"type"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"uniqueValue"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"field1"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"FULL_NAME"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"defaultSymbol"&lt;/span&gt;:&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"color"&lt;/span&gt;:&amp;nbsp;[&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;255&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"width"&lt;/span&gt;:&amp;nbsp;2,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"type"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"esriSLS"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"style"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"esriSLSSolid"&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"uniqueValueInfos"&lt;/span&gt;:&amp;nbsp;[&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"value"&lt;/span&gt;:&amp;nbsp;&lt;span style="color: #a31515;"&gt;"I&amp;nbsp;10"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"symbol"&lt;/span&gt;:&amp;nbsp;{&lt;br /&gt;....&lt;/pre&gt;&lt;br /&gt;Che possiamo impostare in javascript:&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;&amp;nbsp;webmap.itemData&amp;nbsp;=&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"operationalLayers"&lt;/span&gt;:&amp;nbsp;[{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;/pre&gt;&lt;br /&gt;Se invece desideriamo creare la mappa da id possiamo utilizzare:&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;mapDeferred&amp;nbsp;=&amp;nbsp;esri.arcgis.utils.createMap(&lt;span style="color: #a31515;"&gt;"b4ad815cb1ec46dcac03ecd8a31c82ff"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"map"&lt;/span&gt;,&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mapOptions:&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;slider:&amp;nbsp;&lt;span style="color: blue;"&gt;true&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nav:&lt;span style="color: blue;"&gt;false&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/pre&gt;&lt;br /&gt;Infine abbiamo la possibilità di modificare l'ArcGIS URL mediante arcgisUrl. Il default è &lt;a href="http://arcgis.com/sharing/content/items"&gt;http://arcgis.com/sharing/content/items&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New;"&gt;esri&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;arcgis&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;utils&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;arcgisUrl &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;a href="http://arcgis.com/sharing/content/items"&gt;http://arcgis.com/sharing/content/items&lt;/a&gt;&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;E' possibile così impostare il proprio dominio dove è localizzata la nostra mappa (es. &lt;a href="http://mydomain/sharing/content/items"&gt;http://mydomain/sharing/content/items&lt;/a&gt;) ed utilizzare le api di ESRI. Nel 2012 sarà disponibile&lt;a href="http://www.esri.com/software/arcgis/portal-for-arcgis/index.html"&gt; Portal for ArcGIS&lt;/a&gt; che permetterà alle organizzazioni di&amp;nbsp;fare il proprio deployment&amp;nbsp;con le caratteristiche di&amp;nbsp;'ArcGIS Online' nella propria intrastruttura.&lt;br /&gt;Per&amp;nbsp;connetterti con il tuo&amp;nbsp;smartphone al tuo&amp;nbsp;ArcGIS Server puoi seguire il seguente &lt;a href="http://help.arcgis.com/en/arcgismobile/10.0/apis/iphone/AppGuide/Maps.pdf"&gt;documento&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Analogamente in &lt;a href="http://help.arcgis.com/en/webapi/silverlight/samples/start.htm#LoadWebMap"&gt;Silverlight API&lt;/a&gt; e &lt;a href="http://help.arcgis.com/en/webapi/flex/samples/01nq/01nq00000056000000.htm"&gt;Flex API&lt;/a&gt; abbiamo funzionalità per caricare e per gestire webmap.&lt;br /&gt;&lt;br /&gt;Infine, volevo sottolineare che ho fatto una breve panoramica ma le funzionalità messe a disposizione da ArcGIS.com - soprattutto con la possibilità dalla 10.1 di poter (tramite subscription) creare servizi direttamente su ArcGIS.com (&lt;a href="http://help.arcgis.com/en/arcgisonline/help/#/Publishing_hosted_tiled_map_services/010q0000006n000000/"&gt;tiled map service&lt;/a&gt;&amp;nbsp;e &lt;a href="http://help.arcgis.com/en/arcgisonline/help/#/Publishing_hosted_feature_services/010q0000006m000000/"&gt;feature service&lt;/a&gt; per ora) - sono tantissime.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8323071861123024882-8014249831670544933?l=nicogis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicogis.blogspot.com/feeds/8014249831670544933/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8323071861123024882&amp;postID=8014249831670544933' title='3 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/8014249831670544933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/8014249831670544933'/><link rel='alternate' type='text/html' href='http://nicogis.blogspot.com/2012/01/shapefile-il-vecchio-e-arcgiscom-il.html' title='Shapefile (il vecchio) e ArcGIS.com (il nuovo)'/><author><name>Ing. Domenico Ciavarella</name><uri>http://www.blogger.com/profile/11116200904149667988</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-hc7A5NAVWEU/TbxOnHjqZPI/AAAAAAAAALM/8Mvi5N0jizs/s220/001.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-UDM0DP-u5zU/TxHG78KUpZI/AAAAAAAAAWY/vRpNhhvAq5A/s72-c/properties.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8323071861123024882.post-6867475287458845036</id><published>2011-12-12T08:48:00.000+01:00</published><updated>2011-12-12T08:48:57.535+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='funzioni hash'/><category scheme='http://www.blogger.com/atom/ns#' term='MD5'/><category scheme='http://www.blogger.com/atom/ns#' term='checksum'/><title type='text'>Fidarsi è bene ma con checksum è meglio!</title><content type='html'>Con la versione 10 il software ESRI è distribuito tramite la CDN di Akamai. Sebbene sia&amp;nbsp;ancora disponibile la possibilità di richiedere il software su supporto DVD, è innegabile il vantaggio di poter scaricare il software direttamente sul proprio computer. E' altrettanto vero che l'operazione di scaricamento potrebbe durare anche molte ore se non si ha a disposizione una connessione veloce; qui infatti ci viene incontro&amp;nbsp;il &lt;a href="http://www.akamai.com/dl/feature_sheets/Akamai_Download_Manager_FS.pdf"&gt;Download Manager&lt;/a&gt;&amp;nbsp;che ci permette di mettere in pausa o fermare il download e riprenderlo più tardi, scaricare più file simultaneamente e recuperare&amp;nbsp;il download corrente su una&amp;nbsp;perdita di connessione o da crash di sistema.&lt;br /&gt;Se&amp;nbsp;tuttavia non si vuole utilizzare il Download Manager (ad esempio non accettiamo di installarlo), è possibile scaricare direttamente&amp;nbsp;l'immagine del software.&amp;nbsp;Così facendo è&amp;nbsp;consigliabile, una volta scaricato il file,&amp;nbsp;controllarne&amp;nbsp;la checksum.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-8ZgUaKgNWHE/TuSqCyq9sLI/AAAAAAAAAUM/fRzrnnCNIV0/s1600/checksum.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-8ZgUaKgNWHE/TuSqCyq9sLI/AAAAAAAAAUM/fRzrnnCNIV0/s1600/checksum.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;La&amp;nbsp;checksum, cioè somma di controllo, viene utilizzata per verificare l'integrità di un dato o di un messaggio che&amp;nbsp;potrebbe subire alterazioni. Una somma di controllo potrebbe sommare tutti i bit del dato e verificare se la somma dei bit trasmessi corrisponda a quella calcolata prima del trasferimento.&amp;nbsp;&amp;nbsp;Se due o più&amp;nbsp;input hanno la stessa somma, quindi la stessa checksum, si parla di collisione.&amp;nbsp;Minore è la probabilità di collisione, migliore è la qualità dell'algoritmo di controllo&amp;nbsp;per verificare l'integrità del dato in sicurezza.&amp;nbsp;Pertanto è importante utilizzare algoritmi con strutture matematiche complesse per impedire a&amp;nbsp;malintenzionati di&amp;nbsp;calcolare checksum che determinino collisioni. Quando scarichiamo file da internet, è buona pratica verificare&amp;nbsp; la checksum&amp;nbsp;per poter assicurare che i dati scaricati siano corretti e per garantirne l'autenticità. In genere per la checksum (digest nel caso specifico)&amp;nbsp;vengono utilizzati algoritmi di hash crittografati, come MD5 e SHA-1 che comunque non sono esenti da collisioni.&lt;br /&gt;&lt;a href="http://it.wikipedia.org/wiki/Hash"&gt;Qui&lt;/a&gt; possiamo vedere una panoramica sulle funzioni hash e degli attacchi ai quali potrebbero essere soggetti: &lt;a href="http://it.wikipedia.org/wiki/Collisione_hash"&gt;collisione hash,&lt;/a&gt; &lt;a href="http://it.wikipedia.org/wiki/Attacco_del_compleanno"&gt;attacco del compleanno,&lt;/a&gt; attacco preimmagine, &lt;a href="http://it.wikipedia.org/wiki/Tabella_arcobaleno"&gt;tabella arcobaleno,&lt;/a&gt; &lt;a href="http://it.wikipedia.org/wiki/Attacco_del_canale_laterale"&gt;attacco del canale laterale&lt;/a&gt; e &lt;a href="http://it.wikipedia.org/wiki/Attacco_a_forza_bruta"&gt;attacco a forza bruta&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Con c# possiamo facilmente calcolare la checksum (MD5) di un file:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;&amp;nbsp;           &lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;FileStream&lt;/span&gt;&amp;nbsp;file&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;FileStream&lt;/span&gt;(txtFile.Text,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;FileMode&lt;/span&gt;.Open))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;byte&lt;/span&gt;[]&amp;nbsp;retVal;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;MD5&lt;/span&gt;&amp;nbsp;md5&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;MD5CryptoServiceProvider&lt;/span&gt;())&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;retVal&amp;nbsp;=&amp;nbsp;md5.ComputeHash(file);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;txtMD5.Text=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;BitConverter&lt;/span&gt;.ToString(retVal).Replace(&lt;span style="color: #a31515;"&gt;"-"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;""&lt;/span&gt;);&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;hex&amp;nbsp;string&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://www.studioat.it/studioat/uploads/fciv.zip"&gt;Qui&lt;/a&gt; potete scaricare la soluzione.&lt;br /&gt;Controllo di un file scaricato con verifica del checksum (MD5)&amp;nbsp;dichiarato:&lt;br /&gt;&lt;br /&gt;Esito positivo&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-0R0dq_Q2ocM/TuS7E9YPjmI/AAAAAAAAAUU/IAqrzwpBd64/s1600/md5ok.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-0R0dq_Q2ocM/TuS7E9YPjmI/AAAAAAAAAUU/IAqrzwpBd64/s1600/md5ok.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Esito negativo:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-OVkFbBcZEoI/TuS7l8h25lI/AAAAAAAAAUc/n_NkCBcJ1E0/s1600/md5ko.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-OVkFbBcZEoI/TuS7l8h25lI/AAAAAAAAAUc/n_NkCBcJ1E0/s1600/md5ko.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8323071861123024882-6867475287458845036?l=nicogis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicogis.blogspot.com/feeds/6867475287458845036/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8323071861123024882&amp;postID=6867475287458845036' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/6867475287458845036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/6867475287458845036'/><link rel='alternate' type='text/html' href='http://nicogis.blogspot.com/2011/12/fidarsi-e-bene-ma-con-checksum-e-meglio.html' title='Fidarsi è bene ma con checksum è meglio!'/><author><name>Ing. Domenico Ciavarella</name><uri>http://www.blogger.com/profile/11116200904149667988</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-hc7A5NAVWEU/TbxOnHjqZPI/AAAAAAAAALM/8Mvi5N0jizs/s220/001.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-8ZgUaKgNWHE/TuSqCyq9sLI/AAAAAAAAAUM/fRzrnnCNIV0/s72-c/checksum.png' height='72' width='72'/><thr:total>0</thr:total><georss:featurename>Via Luciano Manara, 48, 20052 Monza MB, Italia</georss:featurename><georss:point>45.5902194 9.256010800000013</georss:point><georss:box>15.010433400000004 -50.50961419999999 76.17000540000001 69.02163580000001</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8323071861123024882.post-7138288376671108511</id><published>2011-11-30T10:05:00.012+01:00</published><updated>2011-12-06T10:19:06.154+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='polimorfismo'/><category scheme='http://www.blogger.com/atom/ns#' term='DataContractJsonSerializer'/><category scheme='http://www.blogger.com/atom/ns#' term='Json'/><title type='text'>Deserializzazione JSON: polimorfismo</title><content type='html'>Quando si ha a che fare con il formato JSON, ad esempio quando richiamiamo i servizi rest SOE ESRI, .NET ci mette a disposizione&amp;nbsp;&lt;a href="http://msdn.microsoft.com/it-it/library/system.runtime.serialization.json.datacontractjsonserializer.aspx"&gt;&lt;span style="color: #1364c4;"&gt;DataContractJsonSerializer&lt;/span&gt;&lt;/a&gt; che ci consente di serializzare direttamente oggetti di tipo .NET in dati JSON e di deserializzare tali dati in istanze di tipi .NET. Tuttavia, uno dei problemi&amp;nbsp;sorge&amp;nbsp;quando il servizio REST ci restituisce istanze di oggetti diversi o derivati. Javascript è un linguaggio con tipizzazione debole e l'identità del tipo non rappresenta solitamente un problema. Il problema si presenta quando si utilizza JSON per le comunicazioni tra un sistema fortemente tipizzato (.NET) e uno con tipizzazione debole (Javascript): è utile allora mantenere l'identità del tipo. &lt;br /&gt;&lt;br /&gt;Prendiamo questo esempio: i tipi con nomi di contratto dati "Envelope" e "Point" derivano da un tipo con nome di contratto dati "Geometry". Se "Point" viene inviato da .NET a Javascript e viene quindi restituito ad un metodo .NET che prevede "Geometry", è utile per .NET sapere che l'oggetto in questione è stato originariamente un "Point"; in caso contrario, tutte le informazioni specifiche del tipo derivato (ad esempio i membri dati "x" e "y" su "Point") potrebbero andare perdute.&lt;br /&gt;Per mantenere l'identità del tipo, durante la serializzazione di tipi complessi in JSON, può essere aggiunto un suggerimento; il deserializzatore riconosce tale suggerimento e agisce di conseguenza. Il suggerimento relativo ai tipi è rappresentato da una coppia chiave/valore JSON dove il nome della chiave è "__type" (due caratteri di sottolineatura seguiti dalla parola "type"). Il valore è rappresentato invece da una stringa JSON con forma 'DataContractName:DataContractNamespace' (tutto il testo che precede i due punti rappresenta il nome).&lt;br /&gt;&lt;br /&gt;Per ridurre le dimensioni dei messaggi JSON, il prefisso dello spazio dei nomi del contratto dati predefinito viene sostituito dal carattere "#". Per rendere reversibile questa sostituzione, viene utilizzata una regola di escape: se il primo carattere nello spazio dei nomi è "#" o "\", verrà aggiunto un carattere "\"). Pertanto, se "Point" è un tipo nello spazio dei nomi .NET "Studioat.Geometry", il relativo spazio dei nomi del contratto dati sarà: http://schemas.datacontract.org/2004/07/Studioat.Geometry. Le forme e la rappresentazione JSON appaiono nel modo seguente.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;&lt;span style="color: green;"&gt;//prima&amp;nbsp;forma&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;a1&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;"{\"__type\":\"Point:http:\\/\\/schemas.datacontract.org\\/2004\\/07\\/Studioat.Geometry\",\"X\":10.256,\"Y\":80.729}"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: green;"&gt;//seconda&amp;nbsp;forma&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;a2&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;"{\"__type\":\"Point:#Studioat.Geometry\",\"X\":10.256,\"Y\":80.729}"&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;Sia i nomi troncati (#Studioat.Geometry) che quelli completi vengono riconosciuti durante la deserializzazione.&amp;nbsp;Inoltre il suggerimento relativo ai tipi deve essere visualizzato all'inizio nella rappresentazione JSON. Questo è il solo caso in cui l'ordine delle coppie chiave/valore è importante nell'elaborazione di JSON. &lt;br /&gt;Di seguito viene riportato un esempio di modalità non valida per specificare un suggerimento relativo ai tipi.&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;a2&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;"{\"X\":10.256,\"Y\":80.729,\"__type\":\"Point:#Studioat.Geometry\"}"&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System.IO;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System.Runtime.Serialization;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System.Runtime.Serialization.Json;&lt;br /&gt; &lt;br /&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt;&amp;nbsp;Studioat.ScratchCode&lt;br /&gt;{&lt;br /&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Program&lt;/span&gt;&lt;br /&gt; {&lt;br /&gt;  &lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;Main(&lt;span style="color: blue;"&gt;string&lt;/span&gt;[]&amp;nbsp;args)&lt;br /&gt;  {&lt;br /&gt;     &lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;a1&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;"{\"__type\":\"Point:http:\\/\\/schemas.datacontract.org\\/2004\\/07\\/Studioat.Geometry\",\"X\":10.256,\"Y\":80.729}"&lt;/span&gt;;&lt;br /&gt;     &lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;a2&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;"{\"__type\":\"Point:#Studioat.Geometry\",\"X\":10.256,\"Y\":80.729}"&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;     &lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;b1&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;"{\"__type\":\"Envelope:http:\\/\\/schemas.datacontract.org\\/2004\\/07\\/Studioat.Geometry\",\"XMin\":10.256,\"YMin\":80.729,\"XMax\":21.956,\"YMax\":34.712}"&lt;/span&gt;;&lt;br /&gt;     &lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;b2&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;"{\"__type\":\"Envelope:#Studioat.Geometry\",\"XMin\":10.256,\"YMin\":80.729,\"XMax\":21.956,\"YMax\":34.712}"&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;     &lt;span style="color: blue;"&gt;byte&lt;/span&gt;[]&amp;nbsp;rawstring&amp;nbsp;=&amp;nbsp;System.Text.&lt;span style="color: #2b91af;"&gt;Encoding&lt;/span&gt;.Unicode.GetBytes(a1);&lt;br /&gt;     &lt;span style="color: #2b91af;"&gt;MemoryStream&lt;/span&gt;&amp;nbsp;stream&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;MemoryStream&lt;/span&gt;(rawstring);&lt;br /&gt; &lt;br /&gt;     &lt;span style="color: #2b91af;"&gt;DataContractJsonSerializer&lt;/span&gt;&amp;nbsp;serializer&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;DataContractJsonSerializer&lt;/span&gt;(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(Geometry.&lt;span style="color: #2b91af;"&gt;Geometry&lt;/span&gt;),&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Type&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(Geometry.&lt;span style="color: #2b91af;"&gt;Envelope&lt;/span&gt;),&amp;nbsp;&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(Geometry.&lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt;)&amp;nbsp;});&lt;br /&gt; &lt;br /&gt;     Geometry.&lt;span style="color: #2b91af;"&gt;Geometry&lt;/span&gt;&amp;nbsp;o&amp;nbsp;=&amp;nbsp;serializer.ReadObject(stream)&amp;nbsp;&lt;span style="color: blue;"&gt;as&lt;/span&gt;&amp;nbsp;Geometry.&lt;span style="color: #2b91af;"&gt;Geometry&lt;/span&gt;;&lt;br /&gt;     &lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(o&amp;nbsp;&lt;span style="color: blue;"&gt;is&lt;/span&gt;&amp;nbsp;Geometry.&lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt;)&lt;br /&gt;     {&lt;br /&gt;      Geometry.&lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt;&amp;nbsp;j&amp;nbsp;=&amp;nbsp;o&amp;nbsp;&lt;span style="color: blue;"&gt;as&lt;/span&gt;&amp;nbsp;Geometry.&lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt;;&lt;br /&gt;      &lt;span style="color: #2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515;"&gt;"Point&amp;nbsp;x:{0}&amp;nbsp;y:{1}"&lt;/span&gt;,&amp;nbsp;j.X,&amp;nbsp;j.Y);&lt;br /&gt;     }&lt;br /&gt;     &lt;span style="color: blue;"&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(o&amp;nbsp;&lt;span style="color: blue;"&gt;is&lt;/span&gt;&amp;nbsp;Geometry.&lt;span style="color: #2b91af;"&gt;Envelope&lt;/span&gt;)&lt;br /&gt;     {&lt;br /&gt;      Geometry.&lt;span style="color: #2b91af;"&gt;Envelope&lt;/span&gt;&amp;nbsp;j&amp;nbsp;=&amp;nbsp;o&amp;nbsp;&lt;span style="color: blue;"&gt;as&lt;/span&gt;&amp;nbsp;Geometry.&lt;span style="color: #2b91af;"&gt;Envelope&lt;/span&gt;;&lt;br /&gt;      &lt;span style="color: #2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515;"&gt;"Envelope&amp;nbsp;xmin:{0}&amp;nbsp;ymin:{1}&amp;nbsp;xmax:{2}&amp;nbsp;ymax:{3}"&lt;/span&gt;,&amp;nbsp;j.XMin,&amp;nbsp;j.YMin,&amp;nbsp;j.XMax,&amp;nbsp;j.YMax);&lt;br /&gt;     }&lt;br /&gt;     &lt;span style="color: #2b91af;"&gt;Console&lt;/span&gt;.Read();&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt;&amp;nbsp;Studioat.Geometry&lt;br /&gt;{&lt;br /&gt; [&lt;span style="color: #2b91af;"&gt;DataContract&lt;/span&gt;]&lt;br /&gt; &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;abstract&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Geometry&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ICloneable&lt;/span&gt;&lt;br /&gt; {&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;  &lt;span style="color: blue;"&gt;protected&lt;/span&gt;&amp;nbsp;Geometry()&lt;br /&gt;  {&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;abstract&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;nbsp;Clone();&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; [&lt;span style="color: #2b91af;"&gt;DataContract&lt;/span&gt;]&lt;br /&gt; &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Geometry&lt;/span&gt;&lt;br /&gt; {&lt;br /&gt; &lt;br /&gt;  &lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;x;&lt;br /&gt;  &lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;y;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;Point()&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: blue;"&gt;this&lt;/span&gt;.x&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;.NaN;&lt;br /&gt;   &lt;span style="color: blue;"&gt;this&lt;/span&gt;.y&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;.NaN;&lt;br /&gt; &lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;Point(&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;x,&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;y)&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: blue;"&gt;this&lt;/span&gt;.x&amp;nbsp;=&amp;nbsp;x;&lt;br /&gt;   &lt;span style="color: blue;"&gt;this&lt;/span&gt;.y&amp;nbsp;=&amp;nbsp;y;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;nbsp;Clone()&lt;br /&gt;  {&lt;br /&gt;   Studioat.Geometry.&lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt;&amp;nbsp;point&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;base&lt;/span&gt;.MemberwiseClone()&amp;nbsp;&lt;span style="color: blue;"&gt;as&lt;/span&gt;&amp;nbsp;Studioat.Geometry.&lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt;;&lt;br /&gt;   &lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;point;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  [&lt;span style="color: #2b91af;"&gt;DataMember&lt;/span&gt;]&lt;br /&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;X&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: blue;"&gt;get&lt;/span&gt;;&lt;br /&gt;   &lt;span style="color: blue;"&gt;set&lt;/span&gt;;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  [&lt;span style="color: #2b91af;"&gt;DataMember&lt;/span&gt;]&lt;br /&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;Y&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: blue;"&gt;get&lt;/span&gt;;&lt;br /&gt;   &lt;span style="color: blue;"&gt;set&lt;/span&gt;;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; [&lt;span style="color: #2b91af;"&gt;DataContract&lt;/span&gt;]&lt;br /&gt; &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Envelope&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Geometry&lt;/span&gt;&lt;br /&gt; {&lt;br /&gt; &lt;br /&gt;  &lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;maxx;&lt;br /&gt;  &lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;maxy;&lt;br /&gt;  &lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;minx;&lt;br /&gt;  &lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;miny;&lt;br /&gt; &lt;br /&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;Envelope()&lt;br /&gt;   :&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;(&lt;span style="color: blue;"&gt;double&lt;/span&gt;.NaN,&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;.NaN,&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;.NaN,&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;.NaN)&lt;br /&gt;  {&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;Envelope(&lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt;&amp;nbsp;minPoint,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt;&amp;nbsp;maxPoint)&lt;br /&gt;   :&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;(minPoint.X,&amp;nbsp;minPoint.Y,&amp;nbsp;maxPoint.X,&amp;nbsp;maxPoint.Y)&lt;br /&gt;  {&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;Envelope(&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;minx,&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;miny,&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;maxx,&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;maxy)&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: blue;"&gt;this&lt;/span&gt;.minx&amp;nbsp;=&amp;nbsp;minx;&lt;br /&gt;   &lt;span style="color: blue;"&gt;this&lt;/span&gt;.miny&amp;nbsp;=&amp;nbsp;miny;&lt;br /&gt;   &lt;span style="color: blue;"&gt;this&lt;/span&gt;.maxx&amp;nbsp;=&amp;nbsp;maxx;&lt;br /&gt;   &lt;span style="color: blue;"&gt;this&lt;/span&gt;.maxy&amp;nbsp;=&amp;nbsp;maxy;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;nbsp;Clone()&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #2b91af;"&gt;Envelope&lt;/span&gt;&amp;nbsp;envelope&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;base&lt;/span&gt;.MemberwiseClone()&amp;nbsp;&lt;span style="color: blue;"&gt;as&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Envelope&lt;/span&gt;;&lt;br /&gt;   &lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;envelope;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  [&lt;span style="color: #2b91af;"&gt;DataMember&lt;/span&gt;]&lt;br /&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;XMax&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: blue;"&gt;get&lt;/span&gt;;&lt;br /&gt;   &lt;span style="color: blue;"&gt;set&lt;/span&gt;;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  [&lt;span style="color: #2b91af;"&gt;DataMember&lt;/span&gt;]&lt;br /&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;XMin&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: blue;"&gt;get&lt;/span&gt;;&lt;br /&gt;   &lt;span style="color: blue;"&gt;set&lt;/span&gt;;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  [&lt;span style="color: #2b91af;"&gt;DataMember&lt;/span&gt;]&lt;br /&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;YMax&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: blue;"&gt;get&lt;/span&gt;;&lt;br /&gt;   &lt;span style="color: blue;"&gt;set&lt;/span&gt;;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  [&lt;span style="color: #2b91af;"&gt;DataMember&lt;/span&gt;]&lt;br /&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;YMin&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: blue;"&gt;get&lt;/span&gt;;&lt;br /&gt;   &lt;span style="color: blue;"&gt;set&lt;/span&gt;;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8323071861123024882-7138288376671108511?l=nicogis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicogis.blogspot.com/feeds/7138288376671108511/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8323071861123024882&amp;postID=7138288376671108511' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/7138288376671108511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/7138288376671108511'/><link rel='alternate' type='text/html' href='http://nicogis.blogspot.com/2011/11/serializzazione-json-polimorfismo.html' title='Deserializzazione JSON: polimorfismo'/><author><name>Ing. Domenico Ciavarella</name><uri>http://www.blogger.com/profile/11116200904149667988</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-hc7A5NAVWEU/TbxOnHjqZPI/AAAAAAAAALM/8Mvi5N0jizs/s220/001.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8323071861123024882.post-8546148638477924110</id><published>2011-10-29T12:47:00.001+02:00</published><updated>2011-10-29T18:44:58.867+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='version'/><category scheme='http://www.blogger.com/atom/ns#' term='post'/><category scheme='http://www.blogger.com/atom/ns#' term='compress'/><category scheme='http://www.blogger.com/atom/ns#' term='reconcile'/><category scheme='http://www.blogger.com/atom/ns#' term='versioning'/><title type='text'>... a qualcuno piace versionato!</title><content type='html'>Il versioning è il meccanismo che abilita più utenti all'editing contemporaneo in geodatabase ArcSDE.&lt;br /&gt;Esso utilizza un modello di concorrenza ottimistica di lock dei dati&amp;nbsp;che, in parole povere, significa che non sono applicati blocchi sulle feature e sulle row durante lunge transazioni.&lt;br /&gt;Il versioning registra e gestisce gli stati delle singole feature e&amp;nbsp;row&amp;nbsp;così come sono modificate mentre preserva l'integrità&amp;nbsp;nel database. Esso è la base per l'accesso multiutente e l'editing simultaneo nei&amp;nbsp;geodatabase Enterprise e non crea copie di dati. Una versione&amp;nbsp;si riferisce ad uno specifico stato del geodatabase. Esso contiene tutti i dataset nel geodatabase ed evolve nel tempo. Gli utenti accedono ai dati attraverso una versione. Dietro le quinte, vengono utilizzate delle query nell'RDBMS &amp;nbsp;per visualizzare o lavorare con uno stato che si riferisce ad un&amp;nbsp;specifico segmento di tempo o per vedere le attuali modifiche del&amp;nbsp;singolo utente.&amp;nbsp;Il versioning permette di gestire complessi workflow di editing che normalmente sono richiesti dai sistemi GIS di fascia Enterprise.&amp;nbsp;Occorre però&amp;nbsp;sottolineare che la maggior parte delle transazioni&amp;nbsp;nei database avvengono nell'ordine dei secondi. Lo stato è l'unità dei cambiamenti (ad esempio una modifica) che è fatta sui dati di un geodatabase;&amp;nbsp; se un cambio è stato fatto esso rappresenta uno snapshot del database.&lt;br /&gt;E' importante però capire perchè le versioni sono importanti: nei geodatabase di tipo enterprise in molti casi molti utenti necessitano di modificare gli stessi dati&amp;nbsp;contemporaneamente. La natura delle relazioni spaziali e della connettività che definisce i dati geografici richiede che le sessioni di editing per dati geospaziali sia dell'ordine delle ore, giorni o settimane. Queste&amp;nbsp;sessioni possono richiedere lunghe transazioni nel DBMS. Inoltre l'utente richiede di poter anche annullare o rifare i cambi apportati, di sviluppare proposte senza&amp;nbsp;intaccare i geodatabase pubblicati&amp;nbsp;e i meccanismi per gestire i cambiamenti nel tempo come i dati e il geodatabase.&lt;br /&gt;&lt;br /&gt;Tutti i geodatabase ArcSDE hanno una versione di default denominata DEFAULT che è di proprietà dell'amministratore ArcSDE. Questa versione esiste sempre e non può essere cancellata. Essa è la radice di tutte le versioni. Normalmente è la versione pubblicata del geodatabase che&amp;nbsp;rappresenta la&amp;nbsp;vista corrente per l'utente finale del geodatabase. La versione di DEFAULT è tipicamente mantenuta e&amp;nbsp;aggiornata nel tempo incorporando in sè&amp;nbsp;le modifiche&amp;nbsp;dalle altre versioni. Come le altre versioni può essere modifica direttamente.&lt;br /&gt;Un geodatabase ArcSDE può avere molte versioni. Una nuova versione (versione figlio) è creata da una versione esistente (versione padre). Quando una versione&amp;nbsp;viene creata è identica alla versione padre. Comunque nel tempo padre e figlio possono&amp;nbsp;divergere a causa delle modifiche&amp;nbsp;effettuate in ogni versione.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Vediamo come creare due versioni&amp;nbsp;figlio della versione di DEFAULT&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-px_BQq_8-GE/TpmmbZ8bUZI/AAAAAAAAAQE/L8mdB8wQ5-Q/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-px_BQq_8-GE/TpmmbZ8bUZI/AAAAAAAAAQE/L8mdB8wQ5-Q/s1600/1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Innanzitutto occorre versionare&amp;nbsp;i dataset&amp;nbsp;abilitati alle modifiche.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Nqyl1y5LV2g/TpmmczUmd3I/AAAAAAAAAQM/xsRZZOscHxI/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-Nqyl1y5LV2g/TpmmczUmd3I/AAAAAAAAAQM/xsRZZOscHxI/s1600/2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Quando registriamo il nostro dataset nel geodatabase ci viene chiesto&amp;nbsp;se desideramo spostare le modifiche nella tabella base: questa possibilità ci permette di lavorare con l'editing versionato ma supporta anche alcune funzionalità dell'editing non versionato. Quest'ultimo abilita gli utenti ad effettuare modifiche direttamente nelle tabelle base dei geodatabase analogamente ai database classici.&amp;nbsp;Se si seleziona questa funzionalità, essa funziona come l'editing versionato&amp;nbsp;tranne quando si effettuano modifiche&amp;nbsp;alla versione di DEFAULT. Quando si modifica la versione di DEFAULT le modifiche vengono apportate direttamente nella tabella base, anche quando le versioni&amp;nbsp;&amp;nbsp;sono riconciliate e postate (vedremo più avanti questi concetti)&amp;nbsp;alla versione di DEFAULT. Chiaramente sia il modello versionato con spostamento delle modifiche nella tabella base che il modello non versionato presentano delle limitazioni rispetto al modello versionato: ad esempio non è supportata la replica o non tutti i tipi di oggetti possono essere modificati.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-eZ2_jdNou9I/TpmmeA9gsxI/AAAAAAAAAQU/HUbd1eGl9Gc/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-eZ2_jdNou9I/TpmmeA9gsxI/AAAAAAAAAQU/HUbd1eGl9Gc/s1600/3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Quando modifichiamo il dataset versionato nell'ambiente di editing ogni versione ci sembra abbia una propria copia dei dati. Infatti quando visualizzamo i dati di una versione piuttosto che un'altra il dataset ci&amp;nbsp;può apparire differente. Il dato invece è memorizzato una sola volta del DBMS e, come abbiamo detto precedentemente, dietro le quinte ArcGIS lascia il dataset nel suo originale stato durante l'editing. Le modifiche vengono memorizzate in tabelle associate al dataset dette&amp;nbsp;'delta table' o tabella A (aggiungi) e tabella D (cancella). Ogni dataset avrà associato una coppia di queste tabelle quando sono registrate come versionate in ArcCatalog.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-JqrSgqbPKV4/TpmmgJLahbI/AAAAAAAAAQc/2d_soEhNG0Q/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-JqrSgqbPKV4/TpmmgJLahbI/AAAAAAAAAQc/2d_soEhNG0Q/s1600/4.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Ogni versione ha un proprietario, una descrizione, una versione padre, associato uno stato del database e un livello di accesso. I livelli di accesso sono:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Private&lt;/strong&gt;: solo il proprietario può vedere e effettuare modifiche;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Protected&lt;/strong&gt;: tutti gli utenti possono vedere ma soltanto il proprietario può effettuare modifiche;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Public&lt;/strong&gt;: tutti gli utenti possono vedere ed effetture modifiche.&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;Il livello di accesso&amp;nbsp;predefinito per la versione di DEFAULT è&amp;nbsp;public. &lt;em&gt;&lt;u&gt;Normalmente è raccomandato di impostare il livello a protected per assicurare che i dati nel geodatabase ArcSDE non siano accidentalmente persi o corrotti. Questo significa che solo l'amministratore ArcSDE può modificare o postare le modifiche&amp;nbsp;alla versione&amp;nbsp;DEFAULT.&lt;/u&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Il versioning, come&amp;nbsp;detto, si presta molto bene a gestire&amp;nbsp;complessi workflow&amp;nbsp;così come progetti GIS&amp;nbsp;a&amp;nbsp;fasi (ogni&amp;nbsp;fase è rappresentata da una versione) e modelli a scenari what-if senza intaccare i dataset originali. &lt;a href="http://help.arcgis.com/en/arcgisdesktop/10.0/help/0027/00270000000s000000.htm"&gt;Qui&lt;/a&gt; potete vedere degli esempi.&lt;br /&gt;Fornisce un framework per gestire sicurezza e assicurare&amp;nbsp;qualità&amp;nbsp;nei dati in editing e supporta archiving e repliche.&lt;br /&gt;Ogni organizzazione può adattare o personalizzare il proprio workflow, visti i moltissimi scenari che il versioning permette di fare. &lt;br /&gt;Il più semplice workflow è avere utenti concorrenti direttamente nella versione di DEFAULT.&lt;br /&gt;Un'altra opzione è creare una versione separata per ogni utente editor. Spesso per proteggere la versione di default si crea una versione di qualità del dato dalla versione di DEFAULT. Questa versione dovrebbe essere gestita da un utente che&amp;nbsp;controlla i dati prima di propagarli alla versione di DEFAULT. Ogni workflow ha pro e contro, pertanto è importante che ognuno utilizzi la miglior strategia atta a soddisfare i propri requisiti&amp;nbsp;nel workflow di business.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Nel nostro esempio creiamo un albero a due livelli (DEFAULT e due figli: VersioneA e VersioneB):&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://help.arcgis.com/en/arcgisdesktop/10.0/help/0027/GUID-14DD0AC0-5E8F-4154-B63C-81525F59F13E-web.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://help.arcgis.com/en/arcgisdesktop/10.0/help/0027/GUID-14DD0AC0-5E8F-4154-B63C-81525F59F13E-web.gif" /&gt;&lt;/a&gt;&lt;/div&gt;Dal Version Manager selezioniamo la versione padre (in questo caso la versione DEFAULT) e con il tasto destro creiamo la versione versioneA e la versione versioneB.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-xUCBt0d78RA/TpmmiC2XquI/AAAAAAAAAQk/ZzHt-c64HT8/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-xUCBt0d78RA/TpmmiC2XquI/AAAAAAAAAQk/ZzHt-c64HT8/s1600/5.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Visualizzazione del Version Manager dopo che abbiamo aggiunto le due versioni.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-xUu1mzhPOWo/TpmmjIf-lnI/AAAAAAAAAQs/aOdm8xcyLWk/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-xUu1mzhPOWo/TpmmjIf-lnI/AAAAAAAAAQs/aOdm8xcyLWk/s1600/6.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Per creare la versione lato programmazione utilizzare l'interfaccia &lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#/IVersion2_Interface/002500000m08000000/"&gt;IVersion2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Qui vediamo un esempio di creazione di due versioni figlio per la versione &lt;em&gt;versioneQA&lt;/em&gt;.&lt;br /&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 10pt;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 10pt;"&gt;&lt;code&gt;&lt;span lang="EN-US" style="color: blue; font-size: 10.5pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;"&gt;public void CreateChildExample(IWorkspace workspace) &lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;div&gt;&lt;code&gt;&lt;span style="color: blue; line-height: 115%; mso-ansi-font-size: 10.5pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &lt;code&gt;&lt;span style="line-height: 115%; mso-ansi-font-size: 10.5pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;"&gt;IVersionedWorkspace versionedWorkspace = (IVersionedWorkspace)workspace;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;span style="color: blue; line-height: 115%; mso-ansi-font-size: 10.5pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;"&gt;&amp;nbsp; IVersion2 qaVersion = (IVersion2)versionedWorkspace.FindVersion("versioneQA");&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;span style="color: blue; line-height: 115%; mso-ansi-font-size: 10.5pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;"&gt;&amp;nbsp; IVersion2 editorAVersion = (IVersion2)qaVersion.CreateChild("VersioneB",qaVersion);&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 10pt;"&gt;&lt;span style="color: blue;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.5pt; line-height: 115%; mso-ansi-language: EN-US;"&gt;&lt;code&gt;&lt;span style="line-height: 115%; mso-ansi-font-size: 10.5pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.5pt; line-height: 115%; mso-ansi-language: EN-US;"&gt;&lt;code&gt;&lt;span style="line-height: 115%; mso-ansi-font-size: 10.5pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;"&gt;IVersion2 editorBVersion = (IVersion2)qaVersion.CreateChild("VersioneB", qaVersion); &lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;code&gt;&lt;span style="color: blue; line-height: 115%; mso-ansi-font-size: 10.5pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-fSp_BKeqTcw/TpmmlMWDwCI/AAAAAAAAAQ0/73MmCjVDS1w/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-fSp_BKeqTcw/TpmmlMWDwCI/AAAAAAAAAQ0/73MmCjVDS1w/s1600/7.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 10pt;"&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Una versione come detto si riferisce ad uno specifico stato del database, un'unità di modifica che&amp;nbsp;avviene nel database. Ogni operazione di modifica eseguita nel geodatabase crea&amp;nbsp;un nuovo stato del database. Un'operazione di modifica è un qualsiasi task o insieme di task (aggiunte,&amp;nbsp;eliminazioni o modifiche) sulle feature o sulle row.&amp;nbsp; I valori di ID dello stato si applicano a&amp;nbsp;qualsiasi modifica fatta nel geodatabase. Inizialmente la versione di DEFAULT punta allo stato&amp;nbsp;0. Con le modifiche al geodatabase l'ID dello stato inizierà ad incrementarsi. Normalmente&amp;nbsp;l'ID dello stato si incrementa di un'unità per ogni operazione di editing. Comunque, ci sono delle eccezioni: dove l'ID dello stato si incrementa con un valore più grande dell'unità, così ad esempio durante un'operazione di riconcilia.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-gwuuAhRoa8o/Tpm-J95jbFI/AAAAAAAAARE/u3gAqCcugHw/s1600/75.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-gwuuAhRoa8o/Tpm-J95jbFI/AAAAAAAAARE/u3gAqCcugHw/s1600/75.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Facciamo ad esempio&amp;nbsp;4 modifiche a due feature class&amp;nbsp;accedendo alla versione di default.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Prima delle modifiche:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-23OXzXOQjv4/TpnCOhXCNoI/AAAAAAAAARM/3nzPXrKiq04/s1600/76.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="330" src="http://4.bp.blogspot.com/-23OXzXOQjv4/TpnCOhXCNoI/AAAAAAAAARM/3nzPXrKiq04/s640/76.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Dopo le modifiche (eliminato un poligono, aggiunti due punti e modificato un attributo di un poligono):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-MuUXGqLOMQU/TpnCeNJiXiI/AAAAAAAAARU/dvfhGbLLVb0/s1600/77.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="496" src="http://3.bp.blogspot.com/-MuUXGqLOMQU/TpnCeNJiXiI/AAAAAAAAARU/dvfhGbLLVb0/s640/77.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;Ora se andiamo a vedere la tabella degli stati:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Mtp0bj8x0KQ/TpnDl8sC8OI/AAAAAAAAARc/mRq2hmkJ2dc/s1600/78.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-Mtp0bj8x0KQ/TpnDl8sC8OI/AAAAAAAAARc/mRq2hmkJ2dc/s1600/78.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Come possiamo notare lo state_id ora è 4 (avendo fatto 4 modifiche). I singoli stati dall'1 al 3 sono stati eliminati.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-rb2gOSMoQkQ/TpnF12jls5I/AAAAAAAAARk/USTlChNOUTk/s1600/79.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-rb2gOSMoQkQ/TpnF12jls5I/AAAAAAAAARk/USTlChNOUTk/s1600/79.png" /&gt;&lt;/a&gt;&lt;/div&gt;Nella tabella delta D (cancellazione) della feature poligonale possiamo notare due record perchè uno si riferisce all'eliminazione di una feature (con ObjectID 8) con riferimento allo stato Id 4 mentre il primo record è stato aggiunto perchè abbiamo fatto una modifica al poligono con ObjectID 3. La modifica aggiunge un record nella tabella delta A con i nuovi valori e contemporaneamente uno nella tabella&amp;nbsp;D per eliminare il vecchio record.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Ora vediamo uno scenario a due livelli: creiamo due versioni (versioneA e versioneB) dalla versione di DEFAULT. In questo scenario l'ID dello stato crescerà con il numero delle modifiche effettuate nelle sessioni di editing nelle varie versioni. Inizialmente le versioni A e B partiranno con lo stesso&amp;nbsp;ID di&amp;nbsp;stato (stato 0)&amp;nbsp;perchè&amp;nbsp;sono state derivate dalla DEFAULT. Ora l'utente&amp;nbsp;A che opera sulla versione A aggiunge una nuova feature&amp;nbsp;e così l'ID di stato si incrementa di 1. Quando l'utente B inizia una sessione di editing, un nuovo&amp;nbsp;ramo separato è creato dalla DEFAULT per registrare le modifiche. In questo scenario abbiamo ad esempio&amp;nbsp;le&amp;nbsp;seguenti operazioni:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Utente&amp;nbsp;A&amp;nbsp;aggiunge una feature;&lt;/li&gt;&lt;li&gt;utente B cancella una feature;&lt;/li&gt;&lt;li&gt;utente A fonde&amp;nbsp;due feature in una singola;&lt;/li&gt;&lt;li&gt;utente B aggiunge una feature.&lt;/li&gt;&lt;/ul&gt;L'ordine di queste operazioni è registrato con il corrispondente ID di stato che rappresenta ogni cambio fatto al geodatabase.&lt;br /&gt;&lt;br /&gt;Gli ID di stato nel geodatabase possono essere concepiti come una struttura ad albero. Questa struttura, chiamata diagramma ad albero degli stati, è una mappa logica degli stati in un geodatabase.&lt;br /&gt;Man mano che si modifica nel tempo il geodatabase, una traccia (lineage) degli stati è mantenuta così da identificare &amp;nbsp;tutte le modifiche apportate in una versione. Per determinare&amp;nbsp;la lineage per una specifica versione, si&amp;nbsp;seleziona il percorso più diretto nell'albero degli stati allo stato 0.&lt;br /&gt;&lt;br /&gt;ID dello stato a 0 (dalla versione DEFAULT)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-8kuFxk8c2bQ/TqLrzCdczoI/AAAAAAAAARs/HBEphbyxv2A/s1600/80.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-8kuFxk8c2bQ/TqLrzCdczoI/AAAAAAAAARs/HBEphbyxv2A/s1600/80.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Sequenza di editing in multiutenza.&lt;br /&gt;&lt;br /&gt;Utente A in versione A: aggiunta di un poligono&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-CgfRvf8knps/TqLr1C8w3JI/AAAAAAAAAR0/haqh6G5C_0s/s1600/81.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-CgfRvf8knps/TqLr1C8w3JI/AAAAAAAAAR0/haqh6G5C_0s/s1600/81.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Utente&amp;nbsp;B in versione B:&amp;nbsp;cancellazione poligono&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ZksWMldyPgQ/TqLr2xpwXNI/AAAAAAAAAR8/687Oxitz3ig/s1600/82.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-ZksWMldyPgQ/TqLr2xpwXNI/AAAAAAAAAR8/687Oxitz3ig/s1600/82.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Utente A in versione A: fusione di 2 poligoni&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-9kZQz0mRM_w/TqLr5LZhLWI/AAAAAAAAASE/cELWfgRavxM/s1600/83.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-9kZQz0mRM_w/TqLr5LZhLWI/AAAAAAAAASE/cELWfgRavxM/s1600/83.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Utente B in versione B: aggiunta di un poligono&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-F94j6J9l26s/TqLr6r5GqFI/AAAAAAAAASM/Zxo2GqOdg_k/s1600/84.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-F94j6J9l26s/TqLr6r5GqFI/AAAAAAAAASM/Zxo2GqOdg_k/s1600/84.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Con il GDBT possiamo visualizzare l'albero degli stati per questa sequenza di editing&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-LhdOimzfSIc/TqLr8dtff3I/AAAAAAAAASU/9UzK2YsZ9Tk/s1600/85.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-LhdOimzfSIc/TqLr8dtff3I/AAAAAAAAASU/9UzK2YsZ9Tk/s1600/85.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Qui vediamo le due lineage delle due versioni:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-NPEexErqImw/TqLwuSr-2MI/AAAAAAAAASc/TD9NLAYGZ8w/s1600/90.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-NPEexErqImw/TqLwuSr-2MI/AAAAAAAAASc/TD9NLAYGZ8w/s1600/90.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ePeWx9yoVA4/TqLyrT0sgVI/AAAAAAAAASk/X_bMNs4YRa4/s1600/91.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-ePeWx9yoVA4/TqLyrT0sgVI/AAAAAAAAASk/X_bMNs4YRa4/s1600/91.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Le relazioni padre-figlio possono essere derivate dalle lineage dello stato. Entrambe le versioni A&amp;nbsp;e B fanno riferimento al loro nuovo stato&amp;nbsp;3 e 4&amp;nbsp;a differenza della&amp;nbsp;DEFAULT e la loro lineage contiene l'ID dello stato al quale riferisce la&amp;nbsp;DEFAULT ovverosia lo stato&amp;nbsp;0. La lineage della versione A è 3,1,0 mentre quella della versione B è 4,2,0 mentre la DEFAULT punta all'ID&amp;nbsp;&amp;nbsp;dello stato 0.&lt;br /&gt;Ciò significa che la DEFAULT è una versione antenata alle versioni A e B. Mentre la versione DEFAULT è la versione padre per le versioni A e B.&lt;br /&gt;&lt;br /&gt;Tutte le versioni che esistono nel geodatabase ArcSDE possono essere viste nel Version Manager ad esclusione di quelle marcate private che sono solo visibili dai loro rispettivi proprietari.&lt;br /&gt;In questa finestra di dialogo possono essere create e cancellate. Come precedentemente detto, è importate implementare la strategia di workflow che si adatti meglio al proprio business poichè la complessità della gestione delle versioni cresce&amp;nbsp;in base al&amp;nbsp;numero di versioni create.&lt;br /&gt;&lt;br /&gt;Le modifiche apportate in una versione rimangono isolate in quella versione fino a quando il proprietario non decide di fonderle con un'altra versione. L'eccezione riguarda il cambio di schema di un dataset (ad esempio aggiunta di un campo in una tabella):&amp;nbsp;questo cambio sarà applicato a tutte le versioni. &lt;br /&gt;&lt;br /&gt;Il compito di fondere in modo appropriato le varie versioni si ottiene in ArcGIS grazie a due operazioni: il reconciling e il posting. Queste due operazioni in genere si eseguono l'una dopo l'altra (per esempio il reconciling seguito dal posting) per combinare le modifiche da una versione all'altra.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Reconcile&lt;/strong&gt;&lt;br /&gt;L'operazione di reconciling è il primo passo per fondere le modifiche tra due versioni. In questo processo le modifiche di una versione antenata (chiamata versione target) sono portate nella versione che è in&amp;nbsp;modifica in una sessione di editing di ArcMap (chiamata versione edit). Una versione target può essere una qualsiasi versione nella lineage della versione che si sta modificando. Ritornando all'esempio precedente, sia la versione A che la versione B possono riconciliare con la DEFAULT perchè entrambe hanno nella loro lineage lo stato con ID 0 che&amp;nbsp;è puntato dalla DEFAULT. Il processo di reconciling fonde le modifiche dalla versione target alla versione edit.&lt;br /&gt;&lt;br /&gt;Per eseguire un'operazione di reconcile ci può essere solamente un utente a modificare la versione di edit. Dal momento che una versione mette tutti gli oggetti versionati nel geodatabase, qualsiasi feature modificata nella versione target verrà inserita nella versione di edit. Dal momento che la maggioranza di queste feature non si troverà in conflitto, si inseriranno senza problemi nella versione di edit. Ad esempio: se un poligono fosse aggiunto alla versione target dopo il processo di reconcile, il poligono apparirebbe anche nella versione di edit. L'utente potrebbe allora decidere se salvare o meno le modifiche nella versione di edit.&lt;br /&gt;Ad un livello concettuale, un processo di reconcile comporta l'unione di modifiche relative ad un ramo dell'albero degli stati con un altro ramo.&lt;br /&gt;&lt;br /&gt;Riprendiamo l'esempio precedente: dalla versione B eliminiamo un poligono.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-_RtzERo6U5k/TqvUam1sFWI/AAAAAAAAATs/XA5ICXlFnAA/s1600/100.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-_RtzERo6U5k/TqvUam1sFWI/AAAAAAAAATs/XA5ICXlFnAA/s1600/100.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Riconciliamo e postiamo&amp;nbsp;con la versione antenata (DEFAULT):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-5jbVnCD55Gg/TqvUcyQ47xI/AAAAAAAAAT0/lzlGn4Oormk/s1600/101.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-5jbVnCD55Gg/TqvUcyQ47xI/AAAAAAAAAT0/lzlGn4Oormk/s1600/101.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Ora passiamo alla versione A: se riconciliamo con la versione&amp;nbsp;DEFAULT scatta il conflitto perchè&amp;nbsp;lo stesso&amp;nbsp;poligono eliminato nella versione B e propagato alla versione DEFAULT esiste nella versione A.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-gONAgGacxt4/TqvUf1a-LsI/AAAAAAAAAT8/3kQm9eb7wtQ/s1600/102.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-gONAgGacxt4/TqvUf1a-LsI/AAAAAAAAAT8/3kQm9eb7wtQ/s1600/102.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Nella&amp;nbsp;finestra di dialog Conflits possiamo gestire&amp;nbsp;i conflitti alfanumeri e&amp;nbsp;geografici.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-nsdsBKacmJo/TqvUjwxj1lI/AAAAAAAAAUE/Ko2WbN67-Gk/s1600/103.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-nsdsBKacmJo/TqvUjwxj1lI/AAAAAAAAAUE/Ko2WbN67-Gk/s1600/103.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Il processo di reconcile può essere implicito od esplicito.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Implicito&lt;/strong&gt;: un'operazione di reconcile è implicita quando ci sono diversi utenti che modificano la stessa versione. Ogni utente mantiene il suo ramo per la durata della sessione di editing. Quando un utente cerca di salvare le modifiche della sua sessione avviene un'operazione di reconcile per mettere le modifiche al ramo dell'utente nel ramo al quale si riferisce la versione. Con più utenti in una versione, ogni volta che si salvano le modifiche viene eseguito il processo di reconcile. Non si può scegliere quando esso avviene: succede sempre quando si salvano le modifiche.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Esplicito&lt;/strong&gt;: Quando si esegue un'operazione di reconcile tra diverse versioni, un utente sceglie quando eseguire il processo di reconcile. Questo è diverso dal processo implicito, che avviene quando si salvano le modifiche. Indipendentemente dal tipo di reconcile, il meccanismo&amp;nbsp;è lo stesso.&lt;br /&gt;&lt;br /&gt;La differenza tra processo implicito ed esplicito è quando avviene il processo di reconcile e&amp;nbsp;come vengono specificate le opzioni di individuazione del conflitto.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Possibili conflitti durante il reconciling&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;In alcuni casi, una piccola percentuale di feature ed oggetti può essere in conflitto quando si confrontano la versione target e la versione edit. I conflitti possono scattare in due scenari di editing:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;quando la stessa feature è aggiornata in entrambe le versioni (target e edit);&lt;/li&gt;&lt;li&gt;quando la stessa feature è aggiornata in una versiona e cancellata nell'altra.&lt;/li&gt;&lt;/ul&gt;In pratica, i conflitti non scatteranno frequentemente per la maggior parte dei processi di reconcile, perchè in molti workflow di business, le versioni tipicamente rappresentano differenti progetti con aree geografiche distinte. Pertanto la probabilità che avvengano dei conflitti è rara. I conflitti di solito sorgono quando gli utenti modificano feature in zone di confine.&lt;br /&gt;&lt;br /&gt;Quando si eseguono operazioni di reconcile, ArcGIS trova i conflitti in due modi: per object ID o per attributo.&lt;br /&gt;Conflitti per object ID significa che si individua una feature in conflitto quando qualsiasi parte di essa (geometria o attributi) è stata modificata sia&amp;nbsp;nella versione di target che in quella di edit.&lt;br /&gt;Conflitto&amp;nbsp;per attributo significa che si individua una feature in conflitto solo quando lo stesso attributo è stato modificato sia nella versione di target che in quello di edit.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Le regole delle risoluzioni dei conflitti si possono impostare automaticamente sia a favore della versione di target che di edit. C'è anche l'opzione di far risolvere manualmente i conflitti individuati all'utente della versione di edit rivedendo ogni conflitto con la finestra di dialogo Conflicts Resolution in ArcMap.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Si può esaminare dettagliatamente ogni conflitto e l'utente decide se applicare la modifica della versione target, mantenere la modifica della versione di edit o riconvertire la feature a com'era&amp;nbsp;all'inizio della sessione di edit. Dopo la risoluzione&amp;nbsp;di tutti i conflitti (se ce ne sono), il processo di reconcile può considerarsi completato e l'utente può salvare le modifiche e continuare a modificare o procedere con un'operazione di post.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Post&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Il post è il secondo passo quando si uniscono le modifiche di due versioni. Questo processo deve sempre seguire un'operazione di riconciliazione. Il processo di post sincronizza la corrente versione di edit con la versione di target. Tutte le modifiche fatte&amp;nbsp;nella versione di edit sono salvate nella versione target facendo entrambe le versioni identiche.&lt;br /&gt;A differenza del processo di reconcile, il posting non può essere annullato una volta che è stato eseguito perchè le modifiche sono applicate ad una versione al di fuori di una sessione di editing.&lt;br /&gt;A&amp;nbsp;questo punto, l'utente della versione di edit ha l'opzione di continuare a fare modifiche in una sessione di editing e poi eseguire un'altro processo di reconcile e&amp;nbsp;di post per sincronizzare le due versioni o semplicemente salvare le modifiche e fermare la sessione di editing nella versione di edit.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Versioning/000100000mq1000000/"&gt;Qui&lt;/a&gt; potete vedere come riconciliare, ascoltare gli eventi delle versioni, trovare le differenze tra versioni e risolvere i conflitti, tutto via codice tramite gli&amp;nbsp; ArcObjects.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Compress&lt;/strong&gt;&lt;br /&gt;Nel tempo un'attività di editing in un geodatabase ArcSDE Enterprise accumula centinaia di migliaia di ID di stato (rappresentanti le modifiche memorizzate nella tabella delta). Questo può impattare negativamente nelle prestazioni. Periodicamente l'amministratore ArcSDE deve comprimere il geodatabase ArcSDE rimuovendo gli stati non più riferiti da una versione.&amp;nbsp; Un'operazione di compress può ridurre la profondità dell'albero degli stati e aiuta&amp;nbsp;nelle prestazioni del sistema.&lt;br /&gt;La compressione non rimuove dati che sono accessibili attraverso la&amp;nbsp;lineage della versione, ma solamente i dati non utilizzati. Un'operazione di compress è implementata come una serie di transazioni che rimuovono e rinominano gli stati, il tutto all'interno di una transazione&amp;nbsp;nel database per assicurare che il DBMS possa ripristinare il geodatabase ad uno stato consistente.&lt;br /&gt;&lt;br /&gt;Albero degli stati prima di un'operazione di compress.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-wUqxQvSnMSk/TqvTUAWh52I/AAAAAAAAATU/Ow7yjClH-os/s1600/105.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-wUqxQvSnMSk/TqvTUAWh52I/AAAAAAAAATU/Ow7yjClH-os/s1600/105.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-MWuc-4z17SQ/TqvTWOT84JI/AAAAAAAAATc/pBJpfxgIpiE/s1600/108.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-MWuc-4z17SQ/TqvTWOT84JI/AAAAAAAAATc/pBJpfxgIpiE/s1600/108.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Albero degli stati dopo un'operazione di compress.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-g9ANH56vwd8/TqvTYBM8fdI/AAAAAAAAATk/o_YYZxbplQc/s1600/109.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-g9ANH56vwd8/TqvTYBM8fdI/AAAAAAAAATk/o_YYZxbplQc/s1600/109.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8323071861123024882-8546148638477924110?l=nicogis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicogis.blogspot.com/feeds/8546148638477924110/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8323071861123024882&amp;postID=8546148638477924110' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/8546148638477924110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/8546148638477924110'/><link rel='alternate' type='text/html' href='http://nicogis.blogspot.com/2011/10/qualcuno-piace-versionato.html' title='... a qualcuno piace versionato!'/><author><name>Ing. Domenico Ciavarella</name><uri>http://www.blogger.com/profile/11116200904149667988</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-hc7A5NAVWEU/TbxOnHjqZPI/AAAAAAAAALM/8Mvi5N0jizs/s220/001.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-px_BQq_8-GE/TpmmbZ8bUZI/AAAAAAAAAQE/L8mdB8wQ5-Q/s72-c/1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8323071861123024882.post-878398650232490139</id><published>2011-09-20T22:02:00.002+02:00</published><updated>2011-09-20T22:02:37.605+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='result map service'/><category scheme='http://www.blogger.com/atom/ns#' term='Geoprocessing'/><title type='text'>Non ti scordar mai del result map service...</title><content type='html'>I servizi di geoprocessing possono essere creati pubblicando due differenti risorse ArcGIS Desktop: un toolbox o un documento di ArcMap contenente layer di tool.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;quando pubblichiamo&amp;nbsp;un toolbox, tutti i tools nel toolbox diventano task di geoprocessing nel servizio di geoprocessing;&lt;/li&gt;&lt;li&gt;quando pubblichiamo un documento di mappa, tutti i layer di tool nel documento di mappa diventano task di geoprocessing del servizio di geoprocessing di ArcGIS Server. I layer di tool sono creati trascinando i tool nella tabella dei contenuti (TOC) di ArcMap;&lt;/li&gt;&lt;li&gt;quando pubblichiamo un documento di mappa contenente layer di tool, possiamo anche specificare se desideriamo che il documento di mappa diventi un servizio di mappa da utilizzare per&amp;nbsp;generare l'output dei task. Un servizio di mappa che genera gli output dei task è chiamato &lt;em&gt;result map service.&amp;nbsp;&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;Ma vediamo nel dettaglio i result map service.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I servizi di geoprocessing possono avere un result map service per creare un'immagine della mappa come risultato dei task. Le immagini sono facili da gestire, trasferire e visualizzare su web.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Le immagini della mappa sono create dal servizio di mappa di ArcGIS Server e sono il risultato della pubblicazione del documento mappa (.mxd). Ma perchè creare un'immagine come risultato del task?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I motivi possono essere molteplici:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div style="text-align: justify;"&gt;il risultato del task potrebbe essere potenzialmente un dataset di grosse dimensioni;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="text-align: justify;"&gt;il tipo di dato restituito in output potrebbe non essere supportato dal client (esempio raster in ArcGIS Explorer). In questo caso utilizziamo il result map service per visualizzare l'output;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="text-align: justify;"&gt;desideriamo&amp;nbsp;proteggere i dati del dataset e consentiamo solo la visualizzazione dei risultati;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="text-align: justify;"&gt;abbiamo una complessa cartografia da visualizzare ed il client non ha le capabilities per poterlo fare;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="text-align: justify;"&gt;abbiamo la necessità di visualizzare immagini in report (ad esempio in report services);&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="text-align: justify;"&gt;per generare tematizzazioni lato server.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Quando utilizziamo i result map service è importante sottolineare che avremo due servizi: il servizio di geoprocessing e il result map service. Questi due servizi sono eseguiti indipendentemente l'uno dall'altro. Quando si invoca il task, ArcGIS Server esegue prima il task di geoprocessing e poi esegue il result map service per generare l'output del servizio di geoprocessing utilizzando la mappa del result map service. Questo significa che l'output dei task nel servizio di geoprocessing deve essere un dataset su disco e non un dataset in memoria perchè il result map service deve poter accedere al dato elaborato (&lt;a href="http://help.arcgis.com/en/sdk/10.0/vba_desktop/componenthelp/index.html#//00240000008n000000"&gt;GPRasterDataLayer&lt;/a&gt;&amp;nbsp;o &lt;a href="http://help.arcgis.com/en/sdk/10.0/vba_desktop/componenthelp/index.html#//002400000051000000"&gt;GPFeatureRecordSetLayer&lt;/a&gt;).&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Uno degli errori più comuni è quello però di utilizzare il result map service come servizio di&amp;nbsp;base della mappa dell'applicazione. L'utente clicca ad esempio su una particella, il nostro task ci restituisce la particella selezionata con un colore in funzione, ad esempio di un attributo. A&amp;nbsp;questo&amp;nbsp;punto, perchè non utilizzare il result map service come servizio di base della mappa? Lo abbiamo già a disposizione senza dover creare un altro servizio di mappa.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I motivi sono due:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div style="text-align: justify;"&gt;quando un&amp;nbsp;result map service è aggiunto ad una applicazione, tutti i layer del servizio sono disponibili alla visualizzazione. Questi&amp;nbsp;layer includono i layer di tool di geoprocessing utilizzati per la generazione dell'output, layer che possono contenere dati sensibili o&amp;nbsp;layer utilizzati dal servizio di geoprocessing ma che non ha senso visualizzare per l'utente (tipo i&amp;nbsp; layer di tool);&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="text-align: justify;"&gt;le mappe di base sono multiscala e multirisoluzione (costruite per mostrare dettagli alle grandi scale&amp;nbsp;&amp;nbsp;e generalizzazioni alle piccole scale).&amp;nbsp;Creare mappe di base multiscala e multirisoluzione che vengono generate velocemente è una&amp;nbsp;caratteristica che il nostro result map service non necessita di avere poichè il suo lavoro è quello di generare un output.&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Passiamo ora ad un esempio pratico.&lt;br /&gt;&lt;br /&gt;Creiamo un modello che calcola le service area (utilizziamo i dati di questo &lt;a href="http://help.arcgis.com/en/arcgisserver/10.0/help/arcgis_server_dotnet_help/0093/00930000003z000000.htm"&gt;esempio&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-jaNMxAxAELI/TneMgB1DamI/AAAAAAAAAPI/zcLgA9DDBvI/s1600/gp1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rba="true" src="http://3.bp.blogspot.com/-jaNMxAxAELI/TneMgB1DamI/AAAAAAAAAPI/zcLgA9DDBvI/s1600/gp1.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Come potete vedere, abbiamo come input i valori di break (impostiamo un default: 1 2 3) e la&amp;nbsp;posizione,&amp;nbsp;mentre come output la service area. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-wfiX2vbuNiY/TneNfdQbfvI/AAAAAAAAAPM/yZ_ZoFqW6qY/s1600/gp2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rba="true" src="http://4.bp.blogspot.com/-wfiX2vbuNiY/TneNfdQbfvI/AAAAAAAAAPM/yZ_ZoFqW6qY/s1600/gp2.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;E' importante salvare l'output&amp;nbsp;su disco poichè successivamente il servizio di mappa ArcGIS Server dovrà utilizzarlo per generare la mappa.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Quando il task del servizio di geoprocessing viene invocato, ArcGIS Server imposta al volo la variabile %&lt;strong&gt;&lt;em&gt;scratchworkspace% &lt;/em&gt;&lt;/strong&gt;al percorso fisico della cartella di nome 'scratch' contenuta all'interno della cartella univoca del job generato. Ogni volta che si esegue un task, una cartella univoca di job è creata all'interno della cartella del servizio&amp;nbsp;contenuta all'interno della cartella 'jobs' di arcgis server. Qui sotto è illustrato lo schema delle cartelle e dei file gestiti da ArcGIS Server durante la creazione dei job.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://help.arcgis.com/en/arcgisdesktop/10.0/help/002v/GUID-5D5B2578-E4D7-414A-A7A0-11FBE53E1FA7-web.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rba="true" src="http://help.arcgis.com/en/arcgisdesktop/10.0/help/002v/GUID-5D5B2578-E4D7-414A-A7A0-11FBE53E1FA7-web.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pertanto abbiamo la possibilità di memorizzare l'output in un file geodatabase già pronto creato dal sistema (scratch.gdb) o salvarlo nella cartella scratch come file (ad esempio come shapefile). &lt;/div&gt;&lt;div style="text-align: justify;"&gt;Nel primo caso il percorso di output sarà:&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;strong&gt;%&lt;em&gt;scratchworkspace%\scratch.gdb\SAPolygon&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Nel secondo cas﻿o sarà:&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;strong&gt;%&lt;em&gt;scratchworkspace%\SAPolygon.shp&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Optiamo per il primo caso e quindi nel modello impostiamo per l'ouput:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-AwY-Xmt9lfU/TneR1wTMcII/AAAAAAAAAPQ/el14Nq-pxYw/s1600/gp3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rba="true" src="http://3.bp.blogspot.com/-AwY-Xmt9lfU/TneR1wTMcII/AAAAAAAAAPQ/el14Nq-pxYw/s1600/gp3.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;A questo punto creiamo la mappa che utilizzeremo come result map service﻿. Trasciniamo nella TOC (tabella dei contenuti) di ArcMap il tool e carichiamo il network dataset utilizzato per il calcolo della service area. E' importante caricare in mappa il network dataset&amp;nbsp;perchè utilizzare layer come sorgenti migliora le prestazioni&amp;nbsp;del modello. Difatti, se si dovesse fare riferimento ad un network dataset&amp;nbsp;su disco ogni volta che viene eseguito il task, il sistema dovrebbe leggere la struttura dei file; mentre, se è già caricato, vengono sfruttate la lettura iniziale e le proprietà del dataset in cache.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/--DZzUeQcJRw/TneUzjvawZI/AAAAAAAAAPU/OPURH2C701k/s1600/gp4.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rba="true" src="http://2.bp.blogspot.com/--DZzUeQcJRw/TneUzjvawZI/AAAAAAAAAPU/OPURH2C701k/s1600/gp4.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ora, dal menu di Geoprocessing di ArcMap, occorre selezionare &lt;strong&gt;&lt;em&gt;Enviroments ... &lt;/em&gt;&lt;/strong&gt;ed impostare nella sezione &lt;em&gt;Workspace&lt;/em&gt; il valore per la proprietà 'Scratch Workspace'. E' importante indicare una cartella dove l'utente SOC&amp;nbsp;abbia i privilegi per leggere; poichè, una volta eseguito&amp;nbsp;il modello per creare il layer di output, il documento di mappa verrà pubblicato ed i layer in esso contenuti&amp;nbsp;dovranno essere accessibili.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In questo esempio ho creato nella cartella 'Progetti' (dove l'utente&amp;nbsp;SOC può leggere) una cartella 'Test' con all'interno una cartella&amp;nbsp;di nome 'Scratch' che a sua volta contiene&amp;nbsp;un file geodatabase di nome 'scratch', così il modello potrà trovare il file geodatabase&amp;nbsp;(visto come ho impostato l'output nel modello).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-oJluk577z9M/TneXlZ2QJdI/AAAAAAAAAPY/BgfRXD4gvoE/s1600/gp5.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rba="true" src="http://2.bp.blogspot.com/-oJluk577z9M/TneXlZ2QJdI/AAAAAAAAAPY/BgfRXD4gvoE/s1600/gp5.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;A questo punto eseguiamo il modello da ArcMap: selezioniamo il layer di tool&amp;nbsp;dalla TOC e clicchiamo con il tasto destro del mouse, dal context menu visualizzato selezioniamo la voce &lt;strong&gt;&lt;em&gt;Open.&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Viene così aperta la maschera di input del modello che ci consente di selezionare un punto sulla mappa e generare la service area.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Inm3yVxHF1Y/TneZALbbNII/AAAAAAAAAPc/i4AbZGOVcyc/s1600/gp6.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rba="true" src="http://1.bp.blogspot.com/-Inm3yVxHF1Y/TneZALbbNII/AAAAAAAAAPc/i4AbZGOVcyc/s1600/gp6.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-QQ2meZBhwvs/TneZGw-VMAI/AAAAAAAAAPg/UGqnBOoyv8g/s1600/gp7.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rba="true" src="http://4.bp.blogspot.com/-QQ2meZBhwvs/TneZGw-VMAI/AAAAAAAAAPg/UGqnBOoyv8g/s1600/gp7.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;A questo punto selezioniamo il tool sulla mashera e clicchiamo un punto sulla mappa. Il modello verrà eseguito e verrà creata la feature class nel file geodatabase indicato in output (la variabile %scratchworkspace% viene risolta da quello che è stato impostato in &lt;em&gt;&lt;strong&gt;Enviroments&lt;/strong&gt;&lt;/em&gt; in ArcMap).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-o3HzD3AnwHw/TneaQGSzcTI/AAAAAAAAAPk/P6loVEviUwI/s1600/gp8.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rba="true" src="http://1.bp.blogspot.com/-o3HzD3AnwHw/TneaQGSzcTI/AAAAAAAAAPk/P6loVEviUwI/s1600/gp8.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Una volta generate le service area, possiamo creare la nostra legenda direttamente in ArcMap o&amp;nbsp;fare riferimento&amp;nbsp;direttamente&amp;nbsp;ad un layer, se nel modello abbiamo impostato il &lt;strong&gt;&lt;em&gt;Layer Symbology&lt;/em&gt;&lt;/strong&gt; dell'output.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://3.bp.blogspot.com/-9brptnq5Amk/TnebVfuaOaI/AAAAAAAAAPo/D5RcopORovM/s1600/gp9.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rba="true" src="http://3.bp.blogspot.com/-9brptnq5Amk/TnebVfuaOaI/AAAAAAAAAPo/D5RcopORovM/s1600/gp9.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Infine creiamo il servizio di mappa dall'mxd indicando nelle capabilities anche &lt;strong&gt;&lt;em&gt;Geoprocessing&lt;/em&gt;&lt;/strong&gt;. Verranno creati, come precedentemente detto, due servizi.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-gqvdxjMhQKU/TnedO0MV48I/AAAAAAAAAPs/xqeblccr7SM/s1600/gp10.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rba="true" src="http://3.bp.blogspot.com/-gqvdxjMhQKU/TnedO0MV48I/AAAAAAAAAPs/xqeblccr7SM/s1600/gp10.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-HSUPUs161LI/TnedWhSyvuI/AAAAAAAAAPw/R_C-dEtjN6k/s1600/gp11.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rba="true" src="http://1.bp.blogspot.com/-HSUPUs161LI/TnedWhSyvuI/AAAAAAAAAPw/R_C-dEtjN6k/s1600/gp11.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-pzkz9T_lt3k/Tned4MC3HwI/AAAAAAAAAP0/7ea3Cuc-4Lg/s1600/gp12.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="86" rba="true" src="http://2.bp.blogspot.com/-pzkz9T_lt3k/Tned4MC3HwI/AAAAAAAAAP0/7ea3Cuc-4Lg/s400/gp12.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Se diamo un'occhiata alle proprietà del servizio di geoprocessing, noteremo che la proprietà Result Map Service punta al servizio di mappa &lt;strong&gt;&lt;em&gt;DrivePolygon&lt;/em&gt;&lt;/strong&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-CedFcnhY-y4/Tnee-oUVr5I/AAAAAAAAAP4/4H4cd_nijXI/s1600/pg13.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rba="true" src="http://4.bp.blogspot.com/-CedFcnhY-y4/Tnee-oUVr5I/AAAAAAAAAP4/4H4cd_nijXI/s1600/pg13.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Ora vediamo come chiamare il task da client. In questo esempio utilizziamo le&amp;nbsp;API Javascript ma potete utilizzare gli analoghi metodi per &lt;a href="http://help.arcgis.com/en/webapi/flex/apiref/com/esri/ags/layers/GPResultImageLayer.html"&gt;Flex&lt;/a&gt; e &lt;a href="http://help.arcgis.com/en/webapi/wpf/apiref/ESRI.ArcGIS.Client~ESRI.ArcGIS.Client.Tasks.Geoprocessor~GetResultImageLayer.html"&gt;Silverlight&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Con il metodo &lt;a href="http://help.arcgis.com/en/webapi/javascript/arcgis/help/jsapi/geoprocessor.htm#getResultImageLayer"&gt;getResultImageLayer&lt;/a&gt; ci facciamo restituire l'output del task come immagine che carichiamo come layer sulla mappa.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;pre style="background: url(&amp;quot;http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif&amp;quot;) rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; &amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&amp;gt;&lt;br /&gt;  &lt;br /&gt; &amp;lt;html&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;head&amp;gt;&lt;br /&gt;  &lt;br /&gt;   &amp;lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"/&amp;gt;&lt;br /&gt;  &lt;br /&gt;   &amp;lt;meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" /&amp;gt;&lt;br /&gt;  &lt;br /&gt;   &amp;lt;!--The viewport meta tag is used to improve the presentation and behavior of the samples &lt;br /&gt;  &lt;br /&gt;    on iOS devices--&amp;gt;&lt;br /&gt;  &lt;br /&gt;   &amp;lt;meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/&amp;gt;&lt;br /&gt;  &lt;br /&gt;   &amp;lt;title&amp;gt;Service Area Task&amp;lt;/title&amp;gt;&lt;br /&gt;  &lt;br /&gt;   &amp;lt;link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/2.4/js/dojo/dijit/themes/claro/claro.css"&amp;gt;&lt;br /&gt;  &lt;br /&gt;   &amp;lt;script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=2.4"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;  &lt;br /&gt;   &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;  &lt;br /&gt;     dojo.require("esri.map");&lt;br /&gt;  &lt;br /&gt;     dojo.require("esri.tasks.gp");&lt;br /&gt;  &lt;br /&gt;     var map, gp;&lt;br /&gt;  &lt;br /&gt;     var driveTimes = "1 2 3";&lt;br /&gt;  &lt;br /&gt;     /*Initialize map, GP and image params*/&lt;br /&gt;  &lt;br /&gt;     function init() {&lt;br /&gt;  &lt;br /&gt;       var startExtent = new esri.geometry.Extent({ "xmin": -122.673387, "ymin": 37.635131, "xmax": -122.157408, "ymax": 37.918426, "spatialReference": { "wkid": 4326} });&lt;br /&gt;  &lt;br /&gt;       map = new esri.Map("mapDiv", { extent: startExtent });&lt;br /&gt;  &lt;br /&gt;       var imageParameters = new esri.layers.ImageParameters();&lt;br /&gt;  &lt;br /&gt;       imageParameters.format = "jpeg"; //set the image type to PNG24, note default is PNG8. &lt;br /&gt;  &lt;br /&gt;       //Takes a URL to a non cached map service. &lt;br /&gt;  &lt;br /&gt;       var dynamicMapServiceLayer = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer", { "imageParameters": imageParameters });&lt;br /&gt;  &lt;br /&gt;       map.addLayer(dynamicMapServiceLayer);&lt;br /&gt;  &lt;br /&gt;       gp = new esri.tasks.Geoprocessor("http://localhost/ArcGIS/rest/services/DrivePolygon/GPServer/PolygonDriver");&lt;br /&gt;  &lt;br /&gt;       gp.setOutputSpatialReference({ wkid: 4326 });&lt;br /&gt;  &lt;br /&gt;       dojo.connect(map, "onClick", computeServiceArea);&lt;br /&gt;  &lt;br /&gt;     }&lt;br /&gt;  &lt;br /&gt;     function computeServiceArea(evt) {&lt;br /&gt;  &lt;br /&gt;       map.graphics.clear();&lt;br /&gt;  &lt;br /&gt;       var pointSymbol = new esri.symbol.SimpleMarkerSymbol();&lt;br /&gt;  &lt;br /&gt;       pointSymbol.setOutline = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255, 0, 0]), 1);&lt;br /&gt;  &lt;br /&gt;       pointSymbol.setSize(5);&lt;br /&gt;  &lt;br /&gt;       pointSymbol.setColor(new dojo.Color([0, 255, 0, 0.25]));&lt;br /&gt;  &lt;br /&gt;       var graphic = new esri.Graphic(evt.mapPoint, pointSymbol);&lt;br /&gt;  &lt;br /&gt;       map.graphics.add(graphic);&lt;br /&gt;  &lt;br /&gt;       var features = [];&lt;br /&gt;  &lt;br /&gt;       features.push(graphic);&lt;br /&gt;  &lt;br /&gt;       var featureSet = new esri.tasks.FeatureSet();&lt;br /&gt;  &lt;br /&gt;       featureSet.features = features;&lt;br /&gt;  &lt;br /&gt;       var params = { "Input_locations": featureSet, "Default_break_values": driveTimes };&lt;br /&gt;  &lt;br /&gt;       gp.submitJob(params, completeCallback, statusCallback);&lt;br /&gt;  &lt;br /&gt;     }&lt;br /&gt;  &lt;br /&gt;     function statusCallback(jobInfo) {&lt;br /&gt;  &lt;br /&gt;       console.log(jobInfo.jobStatus);&lt;br /&gt;  &lt;br /&gt;     }&lt;br /&gt;  &lt;br /&gt;     function completeCallback(jobInfo) {&lt;br /&gt;  &lt;br /&gt;       var imageParams = new esri.layers.ImageParameters();&lt;br /&gt;  &lt;br /&gt;       imageParams.imageSpatialReference = map.spatialReference;&lt;br /&gt;  &lt;br /&gt;       gp.getResultImageLayer(jobInfo.jobId, "SAPolygons", imageParams, function (gpLayer) {&lt;br /&gt;  &lt;br /&gt;         gpLayer.setOpacity(0.5);&lt;br /&gt;  &lt;br /&gt;         map.addLayer(gpLayer)&lt;br /&gt;  &lt;br /&gt;       });&lt;br /&gt;  &lt;br /&gt;     }&lt;br /&gt;  &lt;br /&gt;     dojo.addOnLoad(init);&lt;br /&gt;  &lt;br /&gt;   &amp;lt;/script&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;/head&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;body class="claro"&amp;gt;&lt;br /&gt;  &lt;br /&gt;   &amp;lt;div id="mapDiv" style="width:800px; height:600px; border:1px solid #000;"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;  &lt;br /&gt;   Zoom in to a US city and single click the map. A service area GP task will be executed synchronously and on&lt;br /&gt;  &lt;br /&gt;   completion the results will be drawn as graphic features to the map. The drive time polygons are 1, 2,&lt;br /&gt;  &lt;br /&gt;   and 3 minutes.&lt;br /&gt;  &lt;br /&gt;  &amp;lt;/body&amp;gt;&lt;br /&gt;  &lt;br /&gt; &amp;lt;/html&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-gAW7ac81aSI/TnelffGRnNI/AAAAAAAAAP8/wGjrRgICdBI/s1600/gp14.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rba="true" src="http://2.bp.blogspot.com/-gAW7ac81aSI/TnelffGRnNI/AAAAAAAAAP8/wGjrRgICdBI/s1600/gp14.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Come possiamo vedere da &lt;a href="http://www.fiddler2.com/fiddler2/"&gt;Fiddler&lt;/a&gt; alla riga 21 viene invocato il job, dalla 22 alla 26 viene controllato se il job ha terminato con successo ed infine alla riga 27 viene fatta la richiesta&amp;nbsp;dell'immagine del job.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-6I-hJpBgVEM/Tnem6WtqQ3I/AAAAAAAAAQA/LMFWLkmPDxA/s1600/pn15.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rba="true" src="http://3.bp.blogspot.com/-6I-hJpBgVEM/Tnem6WtqQ3I/AAAAAAAAAQA/LMFWLkmPDxA/s1600/pn15.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Come possiamo vedere&amp;nbsp;nel dettaglio la richiesta &lt;a href="http://resources.esri.com/help/9.3/arcgisserver/apis/rest/gpresult.html"&gt;REST&lt;/a&gt; dell'immagine è:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://localhost/ArcGIS/rest/services/DrivePolygon/GPServer/PolygonDriver/jobs/ja354cae94d0e44fcb740484883d42d56/results/SAPolygons?dpi=96&amp;amp;transparent=true&amp;amp;format=png8&amp;amp;imageSR=4326&amp;amp;f=image&amp;amp;bbox=%7B%22xmin%22%3A-122.69005570312501%2C%22ymin%22%3A37.57078484765625%2C%22xmax%22%3A-122.14073929687501%2C%22ymax%22%3A37.98277215234375%2C%22spatialReference%22%3A%7B%22wkid%22%3A4326%7D%7D&amp;amp;bboxSR=4326&amp;amp;size=800%2C600"&gt;http://localhost/ArcGIS/rest/services/DrivePolygon/GPServer/PolygonDriver/jobs/ja354cae94d0e44fcb740484883d42d56/results/SAPolygons?dpi=96&amp;amp;transparent=true&amp;amp;format=png8&amp;amp;imageSR=4326&amp;amp;f=image&amp;amp;bbox=%7B%22xmin%22%3A-122.69005570312501%2C%22ymin%22%3A37.57078484765625%2C%22xmax%22%3A-122.14073929687501%2C%22ymax%22%3A37.98277215234375%2C%22spatialReference%22%3A%7B%22wkid%22%3A4326%7D%7D&amp;amp;bboxSR=4326&amp;amp;size=800%2C600&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In sintesi, all'url del geoprocessing si appendono&amp;nbsp;'jobs', l'id del job, 'results' ed il nome del parametro di output e si&amp;nbsp;concatenano i parametri di &lt;a href="http://resources.esri.com/help/9.3/arcgisserver/apis/rest/export.html"&gt;export map&lt;/a&gt;&amp;nbsp;per l'immagine.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8323071861123024882-878398650232490139?l=nicogis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicogis.blogspot.com/feeds/878398650232490139/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8323071861123024882&amp;postID=878398650232490139' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/878398650232490139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/878398650232490139'/><link rel='alternate' type='text/html' href='http://nicogis.blogspot.com/2011/09/non-ti-scordar-mai-del-result-map.html' title='Non ti scordar mai del result map service...'/><author><name>Ing. Domenico Ciavarella</name><uri>http://www.blogger.com/profile/11116200904149667988</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-hc7A5NAVWEU/TbxOnHjqZPI/AAAAAAAAALM/8Mvi5N0jizs/s220/001.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-jaNMxAxAELI/TneMgB1DamI/AAAAAAAAAPI/zcLgA9DDBvI/s72-c/gp1.PNG' height='72' width='72'/><thr:total>0</thr:total><georss:featurename>Via Luciano Manara, 48, 20052 Monza MB, Italia</georss:featurename><georss:point>45.5902194 9.2560108</georss:point><georss:box>45.5888304 9.2535433 45.591608400000005 9.2584783</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8323071861123024882.post-5996678979939378479</id><published>2011-08-18T21:54:00.000+02:00</published><updated>2011-08-18T21:54:27.300+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='archiving arcgis'/><title type='text'>Archiving: questo sconosciuto ...</title><content type='html'>&lt;div style="text-align: justify;"&gt;Quante volte ti hanno chiesto di tenere traccia di tutte le modifiche apportate nel tempo al geodatabase? Spesso la gestione della history dei dati è un’operazione che non viene effettuata. Ma, così facendo, perdiamo moltissime informazioni. Ad esempio, a domande di questo tipo non potremmo rispondere: &lt;/div&gt;&lt;div style="margin-left: 36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; text-align: justify; text-indent: -18pt;"&gt;&lt;span style="mso-list: Ignore;"&gt;-&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;che valore aveva uno specifico attributo in un determinato periodo di tempo?&lt;/div&gt;&lt;div style="margin-left: 36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; text-align: justify; text-indent: -18pt;"&gt;&lt;span style="mso-list: Ignore;"&gt;-&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;come si è modificata nel tempo una specifica feature o row?&lt;/div&gt;&lt;div style="margin-left: 36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; text-align: justify; text-indent: -18pt;"&gt;&lt;span style="mso-list: Ignore;"&gt;-&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;come è cambiata nel tempo la geometria di un poligono?&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Quante operazioni di analisi spaziale eseguiamo senza considerare le differenze temporali relative ai dati: capite che l’elaborazione potrebbe non dare risultati corretti. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;Il caso più evidente, per fare un esempio pratico, sono le particelle catastali che hanno una dinamicità nel tempo abbastanza elevata (frazionamenti, fusioni, cambi di proprietà ecc.) ma se ci pensate bene anche dati come i comuni o le province cambiano nel tempo (esempio: formazione della provincia di Monza e Brianza o - voci di questi giorni - l’eliminazione di provincie con meno di 300000 abitanti).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Archiving in ArcGIS, introdotto dalla versione 9.2, fornisce la funzionalità di registrare ed accedere ai cambiamenti apportati a tutti i dati o ad un sottoinsieme di essi di un geodatase versionato. Archiving è il meccanismo per catturare, gestire ed analizzare i dati che vengono modificati nel tempo.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Il geodatabase archiving mantiene i cambi dal momento in cui viene abilitato a farlo fino a quando l’archiving è disabilitato.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Precedentemente all’introduzione dell’archiving, una delle soluzioni alternative per catturare le modifiche nel tempo era quella di creare delle versioni, che fungevano da snapshots, per l’intero geodatabase. Comunque, una soluzione di questo tipo non era completamente soddisfacente perché, una volta che i dati venivano deversionati o la versione veniva eliminata, si perdeva la rappresentazione storica dei dati. L’archiving avviene parallelamente alle modiche dei dati non appesantendo il sistema e richiede meno consumo di risorse quando si utilizza rispetto all’equivalente classe versionata.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Il Geodatabase archiving introduce la versione historical in aggiunta a quella già esistente ovvero la versione transactional.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;L’utente può connettersi o ad una versione transactional o ad una versione historical.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Una versione transactional consente ad un utente di modificare i dati. Una versione historical rappresenta i dati ad uno specifico momento nel tempo e fornisce una rappresentazione in sola lettura del geodatabase. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;Un utente può connettersi ad una versione historical utilizzando un riferimento storico (historical marker) o specificando un momento ben preciso. In sostanza con il riferimento storico nominiamo un tempo (esempio: “incendio boschivo zona Spinelli” è il nostro riferimento storico per fare riferimento alla data 14:00 PM Giugno 2003).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Il modello archiving supporta completamente il modello dati del geodatabase: pertanto stand-alone feature classes, feature datasets, tables, relationship classes, networks, topologies, e terrains possono partecipare all’archiving.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;L’archiving richiede che i dati siano registrati come versionati e con l’opzione “&lt;i style="mso-bidi-font-style: normal;"&gt;Register the selected objects with the option to move edits to base.&lt;/i&gt;” non selezionata.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Una volta che l’archiving è abilitato, tutti i cambi salvati o postati alla versione di DEFAULT sono registrati nella corrispondente classe archive. La classe archive è una completa copia della classe abilitata più tutte le modifiche che sono stata salvate o postate alla versione di DEFAULT. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;Una cosa importate da capire è però come ArcGIS rappresenti il tempo quando i cambi vengono effettuati. La history può essere registrata o con un valido momento temporale o con un riferimento temporale transaction. La differenza tra i due è che il primo rappresenta il momento temporale in cui i cambi sono avvenuti nel mondo reale e normalmente vengono registrati dall’utente che applica le modifiche mentre il secondo è il momento in cui il dato è stato modificato nel database. I riferimenti temporali transaction sono generati automaticamente dal sistema e sono quelli utilizzati da ArcGIS. Pertanto occorre prestare molta attenzione per non avere ad esempio modifiche nel geodatabase nell’ordine non corretto rispetto al mondo reale.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Illustriamo ora come abilitare e gestire l’archiving. In questo caso utilizzo la licenza ArcEditor con installato un personal SDE geodatabase memorizzato in SQL Server Express 2008 R2 e copiamo la feature class Trees che trovate nel file geodatabase GDBTrees.gdb&amp;nbsp; della cartella C:\Programmi\ArcGIS\ DeveloperKit10.0\Samples\data\Trees.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Vb6DunTW7Ok/Tk1nipI-MQI/AAAAAAAAAOE/0kh_zuu7orM/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qaa="true" src="http://3.bp.blogspot.com/-Vb6DunTW7Ok/Tk1nipI-MQI/AAAAAAAAAOE/0kh_zuu7orM/s1600/image001.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Da ArcCatalog seleziono la feature class che desidero abilitare all’archiving.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Come detto precedentemente, per poter abilitare la feature class all’archiving, devo in via preliminare versionarla con l’opzione “&lt;i style="mso-bidi-font-style: normal;"&gt;Register the selected objects with the option to move edits to base.&lt;/i&gt;” non abilitata.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-JytJ8Ssy2OQ/Tk1nkIIDE7I/AAAAAAAAAOI/6RvZLboXi4o/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="229" qaa="true" src="http://1.bp.blogspot.com/-JytJ8Ssy2OQ/Tk1nkIIDE7I/AAAAAAAAAOI/6RvZLboXi4o/s320/image003.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-mhsnq44XG5I/Tk1nmINrcfI/AAAAAAAAAOM/P4wSWC9wrx4/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="124" qaa="true" src="http://4.bp.blogspot.com/-mhsnq44XG5I/Tk1nmINrcfI/AAAAAAAAAOM/P4wSWC9wrx4/s640/image005.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Un dataset abilitato all’archiving abiliterà tutte le feature class contenute in esso.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Lato programmazione: se la proprietà &lt;i style="mso-bidi-font-style: normal;"&gt;moveEditsToBase &lt;/i&gt;è abilitata sulla nostra object class, occorre chiamare dall’interfaccia &lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#//002500000m1n000000"&gt;IVersionedObject3&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="color: black; font-family: Verdana; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Segoe UI&amp;quot;; mso-bidi-font-size: 12.0pt;"&gt; &lt;/span&gt;&lt;/b&gt;il metodo &lt;i style="mso-bidi-font-style: normal;"&gt;&lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#/UnRegisterAsVersioned3_Method/002500000m1s000000/"&gt;UnRegisterAsVersioned3&lt;/a&gt;(false) &lt;/i&gt;per deregistrare la classe come versionata disabilitando il ‘moving of edits to the base table’ e poi chiamare sempre dalla &lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#//002500000m1n000000"&gt;IVersionedObject3&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="color: black; font-family: Verdana; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Segoe UI&amp;quot;; mso-bidi-font-size: 12.0pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;il metodo &lt;i style="mso-bidi-font-style: normal;"&gt;&lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#/RegisterAsVersioned3_Method/002500000m1q000000/"&gt;RegisterAsVersioned3&lt;/a&gt;(false) &lt;/i&gt;per registrare l’object come versionato con l’opzione &lt;i style="mso-bidi-font-style: normal;"&gt;moveEditsToBase&lt;/i&gt; a false&lt;i style="mso-bidi-font-style: normal;"&gt;.&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A questo punto possiamo abilitare l’archiving:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-9S8bFeFnL44/Tk1noR2wDBI/AAAAAAAAAOQ/ehHAH5a39WI/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="315" qaa="true" src="http://4.bp.blogspot.com/-9S8bFeFnL44/Tk1noR2wDBI/AAAAAAAAAOQ/ehHAH5a39WI/s640/image007.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Nel momento in cui si abilita l’archiving nel geodatabase viene creata una classe archiving che tiene traccia di tutte le modiche effettuare sull’ object class (in questo esempio la feature class Trees). Nel geodatabase la classe archiving è una tabella con il nome della feature class con l’aggiunta del suffisso ‘_H’&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-0Oc9eT_MeHk/Tk1nqblQf4I/AAAAAAAAAOU/DQHWUhe159c/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" qaa="true" src="http://3.bp.blogspot.com/-0Oc9eT_MeHk/Tk1nqblQf4I/AAAAAAAAAOU/DQHWUhe159c/s640/image009.png" width="576" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;﻿&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Oltre ai campi dell’object class (nel nostro esempio: ObjectID, Year_Planted e Shape) all’archiving class vengono aggiunti anche i campi: GDB_FROM_DATE, GDB_TO_DATE e GDB_ARCHIVE_OID. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;L’GDB_ARCHIVE_OID funge da OBJECTID nella classe archiving (Trees_H).&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-K3wiK6yhi6g/Tk1ntHNYHaI/AAAAAAAAAOY/A7iW44MvK2o/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="630" qaa="true" src="http://2.bp.blogspot.com/-K3wiK6yhi6g/Tk1ntHNYHaI/AAAAAAAAAOY/A7iW44MvK2o/s640/image011.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; mso-layout-grid-align: none; text-align: justify;"&gt;E’ possibile modificare il nome della classe archiving ed i nomi dei campi aggiunti per l’archiving utilizzando la classe &lt;strong&gt;&lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#//0025000000qp000000"&gt;ArchiveRegistrationInfo&lt;/a&gt;&lt;/strong&gt;.&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; mso-layout-grid-align: none; text-align: justify;"&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; mso-layout-grid-align: none; text-align: justify;"&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt;&amp;nbsp;Studioat.Samples.Archiving&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System.Collections.Generic;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;ESRI.ArcGIS.esriSystem;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;ESRI.ArcGIS.Geodatabase;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Program&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;LicenseInitializer&lt;/span&gt;&amp;nbsp;licenseInitializer&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;LicenseInitializer&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #2b91af;"&gt;STAThread&lt;/span&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;Main(&lt;span style="color: blue;"&gt;string&lt;/span&gt;[]&amp;nbsp;args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////ESRI&amp;nbsp;License&amp;nbsp;Initializer&amp;nbsp;generated&amp;nbsp;code.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;licenseInitializer.InitializeApplication(&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;esriLicenseProductCode&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: #2b91af;"&gt;esriLicenseProductCode&lt;/span&gt;.esriLicenseProductCodeArcEditor&amp;nbsp;},&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;esriLicenseExtensionCode&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;});&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////connessione&amp;nbsp;ad&amp;nbsp;una&amp;nbsp;versione&amp;nbsp;transactional&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IWorkspace&lt;/span&gt;&amp;nbsp;workpace&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Archive&lt;/span&gt;.GetPersonalOrWorkgroupArcSdeWorkspace(&lt;span style="color: #a31515;"&gt;"studioat40_sqlexpress"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"sde:sqlserver:studioat40\\sqlexpress"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"OSA"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"History"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Archive&lt;/span&gt;.&lt;span style="color: #2b91af;"&gt;TypeVersion&lt;/span&gt;.VERSION,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"dbo.DEFAULT"&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IFeatureWorkspace&lt;/span&gt;&amp;nbsp;fw&amp;nbsp;=&amp;nbsp;workpace&amp;nbsp;&lt;span style="color: blue;"&gt;as&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IFeatureWorkspace&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IObjectClass&lt;/span&gt;&amp;nbsp;oc&amp;nbsp;=&amp;nbsp;fw.OpenFeatureClass(&lt;span style="color: #a31515;"&gt;"Trees"&lt;/span&gt;)&amp;nbsp;&lt;span style="color: blue;"&gt;as&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IObjectClass&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////facoltativo&amp;nbsp;il&amp;nbsp;passaggio&amp;nbsp;di&amp;nbsp;un&amp;nbsp;set&amp;nbsp;di&amp;nbsp;ArchiveRegistrationInfo&amp;nbsp;per&amp;nbsp;indicare&amp;nbsp;dei&amp;nbsp;nomi&amp;nbsp;diversi&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////rispetto&amp;nbsp;a&amp;nbsp;quelli&amp;nbsp;di&amp;nbsp;default&amp;nbsp;(impostati&amp;nbsp;ad&amp;nbsp;esempio&amp;nbsp;in&amp;nbsp;dbtune)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ISet&lt;/span&gt;&amp;nbsp;setArchiveInfo&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;SetClass&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setArchiveInfo.Add(&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ArchiveRegistrationInfoClass&lt;/span&gt;()&amp;nbsp;{&amp;nbsp;ArchiveTableName&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;"TreesHistory"&lt;/span&gt;,&amp;nbsp;FromFieldName&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;"Da"&lt;/span&gt;,&amp;nbsp;ToFieldName&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;"A"&lt;/span&gt;,&amp;nbsp;OIDFieldName&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;"OIDHistory"&lt;/span&gt;,&amp;nbsp;DatasetName&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;"Trees"&lt;/span&gt;&amp;nbsp;});&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////imposto&amp;nbsp;ad&amp;nbsp;esempio&amp;nbsp;un&amp;nbsp;secondo&amp;nbsp;ArchiveRegistrationInfo&amp;nbsp;se&amp;nbsp;è&amp;nbsp;una&amp;nbsp;classe&amp;nbsp;relazionata&amp;nbsp;a&amp;nbsp;Trees&amp;nbsp;(se&amp;nbsp;utilizzo&amp;nbsp;il&amp;nbsp;3°&amp;nbsp;parametro&amp;nbsp;true&amp;nbsp;nell'abilitazione&amp;nbsp;all'archiving)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////setArchiveInfo.Add(new&amp;nbsp;ArchiveRegistrationInfoClass()&amp;nbsp;{&amp;nbsp;ArchiveTableName&amp;nbsp;=&amp;nbsp;"TreesMaintenanceHistory",&amp;nbsp;FromFieldName&amp;nbsp;=&amp;nbsp;"Da",&amp;nbsp;ToFieldName&amp;nbsp;=&amp;nbsp;"A",&amp;nbsp;OIDFieldName&amp;nbsp;=&amp;nbsp;"OIDHistory",&amp;nbsp;DatasetName&amp;nbsp;=&amp;nbsp;"TreesMaintenance"&amp;nbsp;});&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////ISet&amp;nbsp;setArchiveInfo&amp;nbsp;=&amp;nbsp;null;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;oc.EnableArchiving(setArchiveInfo);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////determino&amp;nbsp;il&amp;nbsp;numero&amp;nbsp;di&amp;nbsp;differenze&amp;nbsp;(inserimenti)&amp;nbsp;tra&amp;nbsp;l'historical&amp;nbsp;name&amp;nbsp;DEFAULT&amp;nbsp;e&amp;nbsp;l'historical&amp;nbsp;name&amp;nbsp;di&amp;nbsp;nome&amp;nbsp;'Test'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////IFIDSet&amp;nbsp;fids&amp;nbsp;=&amp;nbsp;FindHistoricalDifferences(workpace,&amp;nbsp;"Test",&amp;nbsp;"Trees",&amp;nbsp;esriDifferenceType.esriDifferenceTypeInsert);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////Console.WriteLine("Insert:"&amp;nbsp;+&amp;nbsp;fids.Count().ToString());&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////ESRI&amp;nbsp;License&amp;nbsp;Initializer&amp;nbsp;generated&amp;nbsp;code.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////Do&amp;nbsp;not&amp;nbsp;make&amp;nbsp;any&amp;nbsp;call&amp;nbsp;to&amp;nbsp;ArcObjects&amp;nbsp;after&amp;nbsp;ShutDownApplication()&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;licenseInitializer.ShutdownApplication();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Archive&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;enum&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;TypeVersion&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;Version&amp;nbsp;Transactional&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VERSION,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;Version&amp;nbsp;Historical&amp;nbsp;Name&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HISTORICAL_NAME,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;Version&amp;nbsp;Historical&amp;nbsp;Timestamp&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HISTORICAL_TIMESTAMP&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IWorkspace&lt;/span&gt;&amp;nbsp;GetPersonalOrWorkgroupArcSdeWorkspace(&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;server,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;instance,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;authenticationMode,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;database,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;TypeVersion&lt;/span&gt;&amp;nbsp;typeVersion,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;version)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IPropertySet&lt;/span&gt;&amp;nbsp;propertySet&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;PropertySetClass&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;propertySet.SetProperty(&lt;span style="color: #a31515;"&gt;"SERVER"&lt;/span&gt;,&amp;nbsp;server);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;propertySet.SetProperty(&lt;span style="color: #a31515;"&gt;"INSTANCE"&lt;/span&gt;,&amp;nbsp;instance);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;propertySet.SetProperty(&lt;span style="color: #a31515;"&gt;"DATABASE"&lt;/span&gt;,&amp;nbsp;database);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;propertySet.SetProperty(&lt;span style="color: #a31515;"&gt;"AUTHENTICATION_MODE"&lt;/span&gt;,&amp;nbsp;authenticationMode);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;nbsp;o&amp;nbsp;=&amp;nbsp;version;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(typeVersion&amp;nbsp;==&amp;nbsp;&lt;span style="color: #2b91af;"&gt;TypeVersion&lt;/span&gt;.HISTORICAL_TIMESTAMP)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Convert&lt;/span&gt;.ToDateTime(version);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;propertySet.SetProperty(&lt;span style="color: #2b91af;"&gt;Enum&lt;/span&gt;.GetName(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;TypeVersion&lt;/span&gt;),&amp;nbsp;typeVersion),&amp;nbsp;o);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Type&lt;/span&gt;&amp;nbsp;factoryType&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Type&lt;/span&gt;.GetTypeFromProgID(&lt;span style="color: #a31515;"&gt;"esriDataSourcesGDB.SdeWorkspaceFactory"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IWorkspaceFactory&lt;/span&gt;&amp;nbsp;workspaceFactory&amp;nbsp;=&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;IWorkspaceFactory&lt;/span&gt;)&lt;span style="color: #2b91af;"&gt;Activator&lt;/span&gt;.CreateInstance(factoryType);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;workspaceFactory.Open(propertySet,&amp;nbsp;0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ITable&lt;/span&gt;&amp;nbsp;GetArchiveTable(&lt;span style="color: blue;"&gt;this&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IObjectClass&lt;/span&gt;&amp;nbsp;objectClass)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IArchivableClass&lt;/span&gt;&amp;nbsp;archivableClass&amp;nbsp;=&amp;nbsp;objectClass&amp;nbsp;&lt;span style="color: blue;"&gt;as&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IArchivableClass&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;archivableClass.Archive;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;EnableArchiving(&lt;span style="color: blue;"&gt;this&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IObjectClass&lt;/span&gt;&amp;nbsp;objectClass,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ISet&lt;/span&gt;&amp;nbsp;setArchiveInfo)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IArchivableObject&lt;/span&gt;&amp;nbsp;archivableObjecting&amp;nbsp;=&amp;nbsp;objectClass&amp;nbsp;&lt;span style="color: blue;"&gt;as&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IArchivableObject&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(!archivableObjecting.IsArchiving)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////time&amp;nbsp;stamp&amp;nbsp;inizializzato&amp;nbsp;dal&amp;nbsp;sistema&amp;nbsp;(imposto&amp;nbsp;null)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////se&amp;nbsp;l'object&amp;nbsp;class&amp;nbsp;ha&amp;nbsp;relationship&amp;nbsp;è&amp;nbsp;possibile&amp;nbsp;impostare&amp;nbsp;l'ultimo&amp;nbsp;parametro&amp;nbsp;a&amp;nbsp;true&amp;nbsp;per&amp;nbsp;automaticamente&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////abilitare&amp;nbsp;l'archiving&amp;nbsp;sulle&amp;nbsp;object&amp;nbsp;class&amp;nbsp;relazionate&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;archivableObjecting.EnableArchiving(setArchiveInfo,&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;false&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IWorkspace&lt;/span&gt;&amp;nbsp;ConnectoToVersion(&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;server,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;instance,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;user,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;password,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;database,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;TypeVersion&lt;/span&gt;&amp;nbsp;typeVersion,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;version)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IPropertySet&lt;/span&gt;&amp;nbsp;propertySet&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;PropertySetClass&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;propertySet.SetProperty(&lt;span style="color: #a31515;"&gt;"SERVER"&lt;/span&gt;,&amp;nbsp;server);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;propertySet.SetProperty(&lt;span style="color: #a31515;"&gt;"INSTANCE"&lt;/span&gt;,&amp;nbsp;instance);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;propertySet.SetProperty(&lt;span style="color: #a31515;"&gt;"DATABASE"&lt;/span&gt;,&amp;nbsp;database);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;propertySet.SetProperty(&lt;span style="color: #a31515;"&gt;"USER"&lt;/span&gt;,&amp;nbsp;user);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;propertySet.SetProperty(&lt;span style="color: #a31515;"&gt;"PASSWORD"&lt;/span&gt;,&amp;nbsp;password);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;nbsp;o&amp;nbsp;=&amp;nbsp;version;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(typeVersion&amp;nbsp;==&amp;nbsp;&lt;span style="color: #2b91af;"&gt;TypeVersion&lt;/span&gt;.HISTORICAL_TIMESTAMP)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Convert&lt;/span&gt;.ToDateTime(version);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;propertySet.SetProperty(&lt;span style="color: #2b91af;"&gt;Enum&lt;/span&gt;.GetName(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;TypeVersion&lt;/span&gt;),&amp;nbsp;typeVersion),&amp;nbsp;o);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Type&lt;/span&gt;&amp;nbsp;factoryType&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Type&lt;/span&gt;.GetTypeFromProgID(&lt;span style="color: #a31515;"&gt;"esriDataSourcesGDB.SdeWorkspaceFactory"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IWorkspaceFactory&lt;/span&gt;&amp;nbsp;workspaceFactory&amp;nbsp;=&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;IWorkspaceFactory&lt;/span&gt;)&lt;span style="color: #2b91af;"&gt;Activator&lt;/span&gt;.CreateInstance(factoryType);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;workspaceFactory.Open(propertySet,&amp;nbsp;0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IFIDSet&lt;/span&gt;&amp;nbsp;FindHistoricalDifferences(&lt;span style="color: #2b91af;"&gt;IWorkspace&lt;/span&gt;&amp;nbsp;workspace,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;historicalMarkerName,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;tableName,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;esriDifferenceType&lt;/span&gt;&amp;nbsp;differenceType)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IHistoricalWorkspace&lt;/span&gt;&amp;nbsp;historicalWorkspace&amp;nbsp;=&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;IHistoricalWorkspace&lt;/span&gt;)workspace;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IHistoricalVersion&lt;/span&gt;&amp;nbsp;defaultVersion&amp;nbsp;=&amp;nbsp;historicalWorkspace.FindHistoricalVersionByName(historicalWorkspace.DefaultMarkerName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IHistoricalVersion&lt;/span&gt;&amp;nbsp;historicalVersion&amp;nbsp;=&amp;nbsp;historicalWorkspace.FindHistoricalVersionByName(historicalMarkerName);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IFeatureWorkspace&lt;/span&gt;&amp;nbsp;defaultFWS&amp;nbsp;=&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;IFeatureWorkspace&lt;/span&gt;)defaultVersion;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IFeatureWorkspace&lt;/span&gt;&amp;nbsp;historicalFWS&amp;nbsp;=&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;IFeatureWorkspace&lt;/span&gt;)historicalVersion;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ITable&lt;/span&gt;&amp;nbsp;defaultTable&amp;nbsp;=&amp;nbsp;defaultFWS.OpenTable(tableName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ITable&lt;/span&gt;&amp;nbsp;historicalTable&amp;nbsp;=&amp;nbsp;historicalFWS.OpenTable(tableName);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IVersionedTable&lt;/span&gt;&amp;nbsp;versionedTable&amp;nbsp;=&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;IVersionedTable&lt;/span&gt;)defaultTable;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IDifferenceCursor&lt;/span&gt;&amp;nbsp;differenceCursor&amp;nbsp;=&amp;nbsp;versionedTable.Differences(historicalTable,&amp;nbsp;differenceType,&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IFIDSet&lt;/span&gt;&amp;nbsp;fidSet&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;FIDSetClass&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IRow&lt;/span&gt;&amp;nbsp;differenceRow&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;objectID&amp;nbsp;=&amp;nbsp;-1;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;differenceCursor.Next(&lt;span style="color: blue;"&gt;out&lt;/span&gt;&amp;nbsp;objectID,&amp;nbsp;&lt;span style="color: blue;"&gt;out&lt;/span&gt;&amp;nbsp;differenceRow);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;while&lt;/span&gt;&amp;nbsp;(objectID&amp;nbsp;!=&amp;nbsp;-1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fidSet.Add(objectID);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;differenceCursor.Next(&lt;span style="color: blue;"&gt;out&lt;/span&gt;&amp;nbsp;objectID,&amp;nbsp;&lt;span style="color: blue;"&gt;out&lt;/span&gt;&amp;nbsp;differenceRow);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fidSet.Reset();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;fidSet;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IPair&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt;&amp;nbsp;GetHistoricalMarkers(&lt;span style="color: #2b91af;"&gt;IWorkspace&lt;/span&gt;&amp;nbsp;workspace)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IPair&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt;&amp;nbsp;list&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IPair&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IHistoricalWorkspace&lt;/span&gt;&amp;nbsp;historicalWorkspace&amp;nbsp;=&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;IHistoricalWorkspace&lt;/span&gt;)workspace;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IEnumHistoricalMarker&lt;/span&gt;&amp;nbsp;enumHistoricalMarker&amp;nbsp;=&amp;nbsp;historicalWorkspace.HistoricalMarkers;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;enumHistoricalMarker.Reset();&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IHistoricalMarker&lt;/span&gt;&amp;nbsp;historicalMarker&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;while&lt;/span&gt;&amp;nbsp;((historicalMarker&amp;nbsp;=&amp;nbsp;enumHistoricalMarker.Next())&amp;nbsp;!=&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.Add(&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Pair&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;gt;()&amp;nbsp;{&amp;nbsp;First&amp;nbsp;=&amp;nbsp;historicalMarker.Name,&amp;nbsp;Second&amp;nbsp;=&amp;nbsp;historicalMarker.TimeStamp&amp;nbsp;});&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;list;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;classe&amp;nbsp;generica&amp;nbsp;per&amp;nbsp;gestire&amp;nbsp;coppie&amp;nbsp;di&amp;nbsp;oggetti&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;typeparam&amp;nbsp;name=&lt;/span&gt;&lt;span style="color: grey;"&gt;"T"&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;tipo&amp;nbsp;del&amp;nbsp;primo&amp;nbsp;oggetto&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/typeparam&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;typeparam&amp;nbsp;name=&lt;/span&gt;&lt;span style="color: grey;"&gt;"U"&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;tipo&amp;nbsp;del&amp;nbsp;secondo&amp;nbsp;oggetto&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/typeparam&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;struct&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Pair&lt;/span&gt;&amp;lt;T,&amp;nbsp;U&amp;gt;&amp;nbsp;:&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IPair&lt;/span&gt;&amp;lt;T,&amp;nbsp;U&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;T&amp;nbsp;first;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;U&amp;nbsp;second;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;T&amp;nbsp;First&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.first;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.first&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;value&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;U&amp;nbsp;Second&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.second;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.second&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;value&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;interfaccia&amp;nbsp;per&amp;nbsp;coppie&amp;nbsp;di&amp;nbsp;oggetti&amp;nbsp;generici&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;typeparam&amp;nbsp;name=&lt;/span&gt;&lt;span style="color: grey;"&gt;"T"&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;tipo&amp;nbsp;del&amp;nbsp;primo&amp;nbsp;oggetto&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/typeparam&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;typeparam&amp;nbsp;name=&lt;/span&gt;&lt;span style="color: grey;"&gt;"U"&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;tipo&amp;nbsp;del&amp;nbsp;secondo&amp;nbsp;oggetto&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/typeparam&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;interface&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IPair&lt;/span&gt;&amp;lt;T,&amp;nbsp;U&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;T&amp;nbsp;First&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;get&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;set&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;U&amp;nbsp;Second&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;get&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;set&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 12pt; mso-ansi-language: IT; mso-bidi-language: AR-SA; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: IT;"&gt;Una volta che si abilita l’archiving, la classe archiving si presenta con tutti i record dell’object class presenti nella versione di DEFAULT. Come si può notare, la data GDB_FROM_DATE è stata inizializzata nel momento in cui è stato abilitato l’archiving (13/7/2011 alle 20.59.19), mentre il GDB_FROM_TO è lasciato aperto (data impostata ad infinito) .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 12pt; mso-ansi-language: IT; mso-bidi-language: AR-SA; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: IT;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-3B4pndlRWzs/Tk1nvGGAZCI/AAAAAAAAAOc/gPIivbwciIU/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" qaa="true" src="http://2.bp.blogspot.com/-3B4pndlRWzs/Tk1nvGGAZCI/AAAAAAAAAOc/gPIivbwciIU/s640/image013.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 12pt; mso-ansi-language: IT; mso-bidi-language: AR-SA; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: IT;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Facendo una connessione alla versione historical con una data precedente al 13/7/2011 alle 20.59.19 non vediamo nessuna feature perché prima di questa data non era ancora abilitato l’archiving:&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-hk_a8lqrTbk/Tk1nwdiHUxI/AAAAAAAAAOg/c2uKlQqu9XM/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="404" qaa="true" src="http://1.bp.blogspot.com/-hk_a8lqrTbk/Tk1nwdiHUxI/AAAAAAAAAOg/c2uKlQqu9XM/s640/image015.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Ma se effettuiamo una connessione indicando una data posteriore al 13/7/2011 alle 20.59.19 vedremo tutte le feature della feature class (nel nostro caso 5 trees).&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-gGpf_a5CBvU/Tk1nx6-1sFI/AAAAAAAAAOk/N6aOTtBRQuA/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="364" qaa="true" src="http://2.bp.blogspot.com/-gGpf_a5CBvU/Tk1nx6-1sFI/AAAAAAAAAOk/N6aOTtBRQuA/s640/image017.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Da notare che viene creato anche in automatico il riferimento temporale di abilitazione dell’archiving denominato DEFAULT.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Per ogni operazione di archive, il riferimento temporale DEFAULT è aggiornato con il valore dell’operazione di archive. Ciò consente che, quando si sceglie il riferimento temporale DEFAULT e si lavora con una versione historical, &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;la corrente rappresentazione della classe archive è equivalente alla rappresentazione della classe versionata nella versione DEFAULT di tipo transactional.&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Il riferimento temporale di abilitazione dell’archiving può anche essere visto nelle proprietà della feature class:&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-hfUQqADAQYE/Tk1nzqKUcBI/AAAAAAAAAOo/8_Fw4pwEn48/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" qaa="true" src="http://1.bp.blogspot.com/-hfUQqADAQYE/Tk1nzqKUcBI/AAAAAAAAAOo/8_Fw4pwEn48/s640/image019.png" width="524" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Ma ora vediamo cosa succede all’archiving class quando si aggiunge, modifica o cancella una feature nella feature class.&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Lato programmazione: l’evento che cattura il momento dell’operazione di archive è &lt;i style="mso-bidi-font-style: normal;"&gt;&lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#/OnArchiveUpdated_Event/002500000m2p000000/"&gt;OnArchiveUpdated&lt;/a&gt;&lt;/i&gt; dell’interfaccia &lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#//002500000m2n000000"&gt;IVersionEvents2&lt;/a&gt;&lt;/b&gt;.&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Sull’aggiunta di una feature in ArcMap verrà compilato in automatico con la data di sistema il campo GDB_FROM_DATE mentre il campo GDB_TO_DATE verrà lasciato aperto (data impostata ad infinito). I valori nei campi che rappresentano la feature class (OBJECTID, YEAR_PLATED e SHAPE) sono uguali ai corrispondenti della feature class.&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-zIikFO7Na9o/Tk1n10C_iZI/AAAAAAAAAOs/OjsEmnCXwec/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="178" qaa="true" src="http://2.bp.blogspot.com/-zIikFO7Na9o/Tk1n10C_iZI/AAAAAAAAAOs/OjsEmnCXwec/s640/image021.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Ora modifichiamo la posizione spaziale da ArcMap della feature con OBJECID uguale ad 1.&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;﻿﻿﻿﻿﻿﻿ &lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-pGTBj74H-Dw/Tk1n32KzFUI/AAAAAAAAAOw/h1zig7x9Jm4/s1600/image023.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="178" qaa="true" src="http://3.bp.blogspot.com/-pGTBj74H-Dw/Tk1n32KzFUI/AAAAAAAAAOw/h1zig7x9Jm4/s640/image023.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Come possiamo notare la feature con OBJECTID uguale ad 1 e GDB_ARCHIVE_OID uguale ad 1 viene chiusa con la data della modifica della feature class (13/08/2011 alle 20:41.28) col campo GDB_TO_DATE e viene creato un nuovo record con i dati della feature modificati (in questo caso solo il campo shape mentre OBJECTID e YEAR_PLANTED rimangono invariati) e con il valore della data di modifica nel campo GDB_FROM_DATE mentre GDB_TO_DATE rimane aperto (data impostata ad infinito).&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Infine vediamo la cancellazione di una feature con OBJECTID uguale ad &lt;metricconverter productid="3. In" w:st="on"&gt;3. In&lt;/metricconverter&gt; questo caso viene solo compilato il campo GDB_TO_DATE con la data di cancellazione della feature.&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-9AQifZ99Jsw/Tk1n4cKClPI/AAAAAAAAAO0/j_ePBz3bBRw/s1600/image025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="176" qaa="true" src="http://3.bp.blogspot.com/-9AQifZ99Jsw/Tk1n4cKClPI/AAAAAAAAAO0/j_ePBz3bBRw/s640/image025.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align="justify"&gt;﻿&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Per la gestione della history in ArcMap abbiamo a disposizione la toolbar “Geodatabase History”&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-BqIdRG2D938/Tk1n645AjuI/AAAAAAAAAO4/_wkIBJ0ApfQ/s1600/image027.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qaa="true" src="http://4.bp.blogspot.com/-BqIdRG2D938/Tk1n645AjuI/AAAAAAAAAO4/_wkIBJ0ApfQ/s1600/image027.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Il primo pulsante apre il “Geodatabase History Viewer” che permette di visualizzare i dati selezionando un riferimento temporale precedentemente creato (Historical marker) od uno specifico momento temporale senza modificare la connessione. Comodo è l’Auto Apply che, se abilitato, permette sulla modifica dei riferimenti temporali di visualizzare automaticamente i cambiamenti in mappa senza dover cliccare ulteriori pulsanti di conferma.&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-KnqxFFQUz_E/Tk1n7wsB5zI/AAAAAAAAAO8/2yMq7IhD7RM/s1600/image029.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="386" qaa="true" src="http://4.bp.blogspot.com/-KnqxFFQUz_E/Tk1n7wsB5zI/AAAAAAAAAO8/2yMq7IhD7RM/s640/image029.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align="justify"&gt;﻿&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Il secondo pulsante consente di caricare in mappa la classe di archiving della feature class selezionata in TOC.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-wiTqPXi_zR8/Tk1n8sU_m2I/AAAAAAAAAPA/5rQ3MEkv44k/s1600/image031.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="352" qaa="true" src="http://1.bp.blogspot.com/-wiTqPXi_zR8/Tk1n8sU_m2I/AAAAAAAAAPA/5rQ3MEkv44k/s640/image031.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;﻿&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;In questo modo l’utente potrà effettuare le proprie interrogazioni, ad esempio utilizzando il Select By Attributes.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Il terzo pulsante consente di creare i riferimenti temporali (Historical Marker). Una volta selezionata la connessione sulla TOC è possibile creare i riferimenti temporali per poi poterli successivamente utilizzare nella visualizzazione temporale dei dati.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-baIEKyvsDls/Tk1n9kCdqjI/AAAAAAAAAPE/NfIXxfXUxaM/s1600/image033.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="428" qaa="true" src="http://4.bp.blogspot.com/-baIEKyvsDls/Tk1n9kCdqjI/AAAAAAAAAPE/NfIXxfXUxaM/s640/image033.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify" class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;E’ possibile disabilitare l’archiving di un object class. In questo caso tutte le modifiche salvate o postate alla versione di DEFAULT non verranno più registrate nella relativa classe di archivio.&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size: small;"&gt;Quando si disabilita l’archiving, viene presentato un messaggio che chiede se si vuole mantenere o cancellare la classe archive. Se si sceglie di non eliminare la classe archive associata possiamo preservarla come tabella temporale nel geodatabase.&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span lang="EN" style="mso-ansi-language: EN;"&gt;&lt;span style="font-size: small;"&gt;Consigli sulla disabilitazione dell’archiving&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="margin: 0pt; mso-list: l0 level1 lfo1; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"&gt;&lt;div align="justify"&gt;&lt;span style="font-size: small;"&gt;L’archiving deve essere disabilitato su una classe prima che possa essere deversionata. &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0pt; mso-list: l0 level1 lfo1; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"&gt;&lt;div align="justify"&gt;&lt;span style="font-size: small;"&gt;Eliminando un feature dataset od una classe con archiving abilitato preserviamo le classi archive.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div align="justify"&gt;&lt;span style="font-size: small;"&gt;Dalla versione 10 nel geodatabase replication è possibile utilizzare la classe archive per tenere traccia delle modifiche invece di utilizzare le tabelle delta delle versioni. Questa possibilità è disponibile solo per le repliche one-way. In tal modo i riconcilia, post e compress non sono influenzati rendendo la gestione delle versioni e delle repliche indipendenti. Ciò consente anche che la schedulazione della sincronizzazione sia più flessibile.&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size: small;"&gt;Infine illustriamo uno scenario in cui si potrebbe creare un salto temporale nella classe archive:&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size: small;"&gt;Un utente effettua modifiche direttamente nella versione di DEFAULT ed elimina una feature in una sessione di editing. Infine, l’utente salva le modifiche.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;L’attributo GDB_TO_DATE nella classe archive viene aggiornato con la data di sistema della cancellazione dell’oggetto.&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size: small;"&gt;Se lo stesso oggetto è aggiornato da una versione figlia e riconciliata con la versione di DEFAULT, scatta il conflitto. &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size: small;"&gt;Se durante il processo di risoluzione del conflitto l’utente sceglie di sostituire il conflitto con la rappresentazione modificata nella versione figlia, la riga verrà sostituita nella versione di DEFAULT quando la versione stessa verrà postata. L’operazione di archive inserisce una nuova riga nella classe archive e imposta l’attributo GDB_FROM_DATE alla data di sistema e l’attributo GDB_TO_DATE ad infinito (12/31/9999).&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size: small;"&gt;Pertanto, quando l’utente osserva il lineage dell’oggetto temporalmente, le date conterranno un salto tra il GDB_TO_DATE e il GDB_FROM_DATE per il tempo in cui l’oggetto non esiste nella versione di DEFAULT.&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;﻿&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;﻿﻿﻿﻿﻿﻿ &lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8323071861123024882-5996678979939378479?l=nicogis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicogis.blogspot.com/feeds/5996678979939378479/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8323071861123024882&amp;postID=5996678979939378479' title='4 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/5996678979939378479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/5996678979939378479'/><link rel='alternate' type='text/html' href='http://nicogis.blogspot.com/2011/08/archiving-questo-sconosciuto.html' title='Archiving: questo sconosciuto ...'/><author><name>Ing. Domenico Ciavarella</name><uri>http://www.blogger.com/profile/11116200904149667988</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-hc7A5NAVWEU/TbxOnHjqZPI/AAAAAAAAALM/8Mvi5N0jizs/s220/001.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-Vb6DunTW7Ok/Tk1nipI-MQI/AAAAAAAAAOE/0kh_zuu7orM/s72-c/image001.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8323071861123024882.post-6382587126597307691</id><published>2011-07-30T22:07:00.049+02:00</published><updated>2011-08-18T21:20:59.076+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='add-in ArcGIS'/><title type='text'>Add-in: come ti personalizzo ArcGIS Desktop</title><content type='html'>ArcGIS 10 ha introdotto diverse novità per personalizzare ed estendere più facilmente le applicazioni Desktop ArcGIS, introducendo il nuovo modello add-in desktop. Il nuovo modello fornisce un framework, su base dichiarativa, per creare personalizzazioni pacchettizzate in un singolo file compresso. Una delle caratteristiche principali è che gli add-ins sono facilmente condivisibili tra utenti perché non richiedono installazione o registrazione di componenti COM. Gli add-ins sono aggiunti al sistema semplicemente copiandoli in una ben determinata cartella e rimossi cancellandoli dalla cartella stessa. Inoltre, indicando una cartella di rete, è possibile condividerli per una intera organizzazione centralizzando l’installazione.&lt;br /&gt;Gli add-ins possono essere scritti utilizzando .NET o Java con XML. L’XML descrive la personalizzazione mentre le classi .NET o Java forniscono il comportamento personalizzato.&lt;br /&gt;Installando l’SDK ArcObjects, vengono inclusi Wizard per la creazione di Add-Ins integrati direttamente nell’ambiente di sviluppo installato nel sistema (Microsoft Visual Studio - inclusa la versione libera Express - ed Eclipse), agevolando così lo sviluppo. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-oXXUZ6dwqqg/TkwgtOWHyQI/AAAAAAAAANk/BnOB6ytQtkg/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="488" src="http://2.bp.blogspot.com/-oXXUZ6dwqqg/TkwgtOWHyQI/AAAAAAAAANk/BnOB6ytQtkg/s640/image001.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Come avrete già sentito, la personalizzazione che utilizza VBA, dalla versione 10, è stata deprecata anche se è ancora possibile usarla richiedendo un file di licenza per l’estensione VBA. Ma rimangono comunque, in funzione dello scopo o della specifica soluzione da costruire, altre opzioni che potrebbero essere ancora più indicate rispetto agli add-ins. &lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Python&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Molte aree di applicazione in ArcGIS sono accessibili attraverso un semplificato utilizzo delle API Python facendo in modo che i più comuni task possano essere creati facilmente. Inoltre gli script di Python sono facilmente condivisibili e possono essere creati senza un ambiente di sviluppo esterno. Sebbene siano presenti moltissimi moduli di dominio pubblico, Python non è adatto per qualsiasi task di programmazione. Anche se si sta migliorando, non tutte le aree di applicazione in ArcGIS sono state ancora coperte. Inoltre gli ambienti di sviluppo per le modifiche ed il debugging non sono ancora così sofisticati e facili da usare come ambienti tipo Microsoft Visual Studio. Infine non è possibile ascoltare e rispondere ad eventi ArcGIS, implementare interfacce COM o comunicare con molti punti dell’estensibilità COM. &lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;Dalla versione 10.1 sarà possibile creare Add-ins anche mediante Python.&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;a href="http://www.blogger.com/" name="Python"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/" name="Classic"&gt;&lt;/a&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Estensibilità COM classica&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Il framework add-in non supporta ogni punto di estensibilità definita da ArcGIS. Ad esempio non è possibile creare un renderer, un workspace o una feature personalizzati come add-in.&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Se la tua soluzione include tipi di componenti che non sono supportati dal framework add-in, dovrai utilizzare l’approccio di estensibilità COM classica.&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Inoltre, dal momento che gli add-ins non necessitano di operazioni di registrazione, non utilizzare soluzioni basate su add-ins che si basano su dipendenze esterne tipo librerie, assembly o servizi che richiedono la registrazione od un intervento di un amministratore.&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;a href="http://www.blogger.com/" name="Types"&gt;&lt;/a&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Tipi di Add-in&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Le applicazioni ArcGIS desktop supportano un prefissato insieme di tipi di add-in, includendo i più popolari tipi utilizzati nel modello di estensibilità basato su COM introdotto nelle precedenti versioni. I seguenti tipi di add-in sono supportati dalla versione 10:&lt;/div&gt;&lt;ul style="margin-top: 0pt;" type="disc"&gt;&lt;li class="MsoNormal" style="margin: 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; text-align: justify;"&gt;Button e tool&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; text-align: justify;"&gt;Combo box&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; text-align: justify;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;Menu e context menu&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; text-align: justify;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;Multi-items&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; text-align: justify;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;Toolbars&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; text-align: justify;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;Tool palette&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; text-align: justify;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;Dockable windows&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; text-align: justify;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;Application extension&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; text-align: justify;"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;Editor extension&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Gestione degli add-ins&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://www.blogger.com/" name="Managing"&gt;&lt;/a&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 12pt; mso-ansi-language: IT; mso-bidi-language: AR-SA; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: IT;"&gt;Gli add-ins possono essere distribuiti in diversi modi: da repository basati su web, e-mail o da file system o rete. Puoi installare un add-in semplicemente facendo un doppio click sul file di add-in da Esplora risorse.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Quando si fa il doppio click, ESRI fornisce una Utility di installazione Add-In che valida l’add-in e lo copia nell’appropriata cartella ben definita. All’utente viene data la possibilità di vedere l’autore, la descrizione, la versione e informazioni sulla firma digitale dell’add-in prima di procedere all’installazione. Questa utility assicura che il file sia copiato nella cartella appropriata, gestione dei conflitti di nomi e garanzia che le versioni esistenti dei file add-in non siano sovrascritte da una versione precedente. Inoltre l’utility lavora direttamente con file allegati alle e-mail o da link da pagine web. Qui sotto possiamo vedere come si presenta l’add-in gestito dall’utility dopo il doppio click ma prima dell’installazione:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-fEzJUq6vr4k/TkwhM86qVLI/AAAAAAAAANs/gEc2nvG4WxA/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" naa="true" src="http://3.bp.blogspot.com/-fEzJUq6vr4k/TkwhM86qVLI/AAAAAAAAANs/gEc2nvG4WxA/s400/image003.png" width="378" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 12pt; mso-ansi-language: IT; mso-bidi-language: AR-SA; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: IT;"&gt;Per firmare l'Add-in utilizzare l'utility ESRISignAddIn.exe che trovate nella cartella C:\Programmi\File comuni\ArcGIS\bin.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 12pt; mso-ansi-language: IT; mso-bidi-language: AR-SA; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: IT;"&gt;Gli Add-ins possono anche essere installati utilizzando il pulsante &lt;i style="mso-bidi-font-style: normal;"&gt;Add from file &lt;/i&gt;della finestra di dialogo Customize disponibile in tutte le applicazioni ArcGIS Desktop. &lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/--nghCZDOkEY/TkwhmOEi8RI/AAAAAAAAAN0/7Q4wsE3TZUE/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="340" naa="true" src="http://4.bp.blogspot.com/--nghCZDOkEY/TkwhmOEi8RI/AAAAAAAAAN0/7Q4wsE3TZUE/s400/image005.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;E’ possibile accedere alla finestra di dialogo mediante il menu Customize. Gli add-ins installati, utilizzando le opzioni doppio click o ‘Add from file’, sono classificati come add-in locali. Gli add-in locali risiedono in una speciale e ben definita cartella per utente della macchina locale. &lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Nonostante i file add-in possano essere copiati manualmente nelle cartelle ben definite senza utilizzare l’utility ESRI Add-In, occorre prestare particolare attenzione per evitare conflitti di nomi, sovrascrivere versioni e così via. Questo approccio è tipicamente utilizzato quando si condividono add-in nella rete.&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Come i componenti COM classici, tipi di add-in individuali sono accessibili mediante finestra di dialogo Customize. Ad esempio, un button definito in un add-in non si comporta differentemente da un command COM, entrambi sono elencati sotto la loro specifica categoria nella linguetta Commands. Da questa posizione, possono essere trascinati in una toolbar o in un menu.&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Le applicazioni ArcGIS Desktop forniscono una finestra di dialogo per la gestione degli Add-In (Add-In Manager). Nella linguetta Add-Ins di questa finestra di dialogo vengono fornite informazioni di dettaglio per ogni add-in correntemente disponibile perché venga eseguito nell’applicazione corrente. Ad esempio, Add-in costruiti per ArcGlobe non appariranno in ArcMap. Ecco come si presenta la linguetta Add-Ins dell’Add-In Manager:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;﻿&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-jSNuvT13Fuk/TkwhoOIGWyI/AAAAAAAAAN4/MbnNPpQ0tF0/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="292" naa="true" src="http://1.bp.blogspot.com/-jSNuvT13Fuk/TkwhoOIGWyI/AAAAAAAAAN4/MbnNPpQ0tF0/s400/image007.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 12pt; mso-ansi-language: IT; mso-bidi-language: AR-SA; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: IT;"&gt;&lt;/span&gt;﻿&lt;/div&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 12pt; mso-ansi-language: IT; mso-bidi-language: AR-SA; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: IT;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="background: white; color: black; font-family: Consolas;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Mentre la linguetta Options lascia all’utente la possibilità di aggiungere cartelle personalizzate per gli add-in. &lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Il framework add-in in aggiunta cercherà gli add-ins in queste cartelle personalizzate ogni volta che l’applicazione è inizializzata. Questa opzione è particolarmente utile in scenari ove una posizione centralizzata della rete sia utilizzata per condividere add-ins in una organizzazione.&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Gli Add-ins possono essere aggiunti, cancellati ed aggiornati in queste posizioni senza fare interventi sulle macchine client. Gli aggiornamenti saranno automaticamente trasmessi sui client quando le applicazioni sono reinizializzate. La linguetta Options può anche essere utilizzata per disabilitare tutte le funzionalità degli add-in. &lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Ecco come si presenta la linguetta Options:&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-izdijkE11oY/TkwhqPRMzWI/AAAAAAAAAN8/OsZtP1ihMgA/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="292" naa="true" src="http://1.bp.blogspot.com/-izdijkE11oY/TkwhqPRMzWI/AAAAAAAAAN8/OsZtP1ihMgA/s400/image009.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Dall’Add-In Manager, gli utenti possono anche scegliere di disinstallare un particolare add-in. Disinstallando un add-in, il file add-in selezionato verrà spostato nel Cestino dove così si potrà ripristinare, se necessario, successivamente. &lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Il pulsante ‘Delete this Add-In’ è soltanto abilitato per add-ins locali. Per disinstallare un add-in da una cartella personalizzata, occorre semplicemente eliminarlo dalla condivisione o eliminare la cartella personalizzata utilizzando il pulsante ‘Remove Folder’ (in quest’ultimo caso non vedrò più tutti gli add-in contenuti in esso).&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Anatomia del file Add-in&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Un add-in è composto da numerose parti che includono metadati nella forma di file XML che descrive l’add-in stesso così come le sue personalizzazioni, le immagini e altri tipi di dati semplici ad uso delle personalizzazioni e codice compilato. Per mettere insieme tutti questi file relazionati, gli add-ins sono pacchettizzati come archivio compresso con l’estensione del file esriAddIn (ad esempio MyAddIn.esriAddIn).&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Gli add-ins utilizzano tecniche di programmazione sia dichiarativa che imperativa. Il file XML accennato sopra è la porzione dichiarativa e descrive tutti gli aspetti statici dell’add-in, includendo caption, tooltips, help, immagini e dettagli del layout iniziale. La porzione imperativa, o attiva, è il classico modello di programmazione basato su istruzioni che può essere, come abbiamo già detto, un linguaggio .NET o Java.&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Ad esempio, possiamo cambiare l’etichetta e l’immagine di un button senza ricompilare il codice; alcune personalizzazioni, come toolbars, tool palettes e menu sono completamente dichiarative;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;non sono porzioni attive.&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;La distinzione tra aspetti dichiarativi e di programmazione incrementa la flessibilità, riduce e semplifica lo sviluppo per gli sviluppatori, ed in generale rende più facili lo sviluppo e la manutenibilità della soluzione. &lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 12pt; mso-ansi-language: IT; mso-bidi-language: AR-SA; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: IT;"&gt;Il seguente esempio di XML mostra un add-in dove è dichiarata una toolbar con un button in essa:&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ESRI.Configuration&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;http://schemas.esri.com/Desktop/AddIns&lt;/span&gt;"&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;xmlns:xsi&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Acme&amp;nbsp;Custom&amp;nbsp;Mapping&amp;nbsp;Extension&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;AddInID&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;{6fa0df73-57ab-491e-a73d-e58ce07af414}&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;AddInID&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Description&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Custom&amp;nbsp;mapping&amp;nbsp;toolbar.&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Description&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Version&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;1.0&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Version&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Image&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Images\Acme.png&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Image&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Author&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;John&amp;nbsp;Locke&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Author&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Company&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Acme&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Company&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Date&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;5/28/2009&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Date&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Targets&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Target&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Desktop&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;version&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;10.0&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Targets&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;AddIn&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;language&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;CLR&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;library&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Acme.dll&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;namespace&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Acme&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ArcMap&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Commands&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Button&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Acme_ToggleDockWinBtn&lt;/span&gt;"&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;class&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;ToggleDockWinBtn&lt;/span&gt;"&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;caption&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;OpenDockWin&lt;/span&gt;"&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;category&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Acme&amp;nbsp;Tools&lt;/span&gt;"&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;image&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Images\ToggleDockWinBtn.png&lt;/span&gt;"&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;tip&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Toggle&amp;nbsp;dockable&amp;nbsp;window.&lt;/span&gt;"&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;message&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Open&amp;nbsp;dockable&amp;nbsp;window.&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Help&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;heading&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Toggle&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Turns&amp;nbsp;the&amp;nbsp;ACME&amp;nbsp;dockable&amp;nbsp;window&amp;nbsp;on&amp;nbsp;and&amp;nbsp;off.&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Help&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Button&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Commands&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Toolbars&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Toolbar&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Acme_Toolbar&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;caption&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Acme&amp;nbsp;Toolbar&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Items&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Button&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;refID&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Acme_ToggleDockWinBtn&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Items&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Toolbar&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Toolbars&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ArcMap&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;AddIn&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ESRI.Configuration&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Il seguente esempio di codice mostra la porzione attiva di un button. Tutti gli ArcObjects, così come la ricchezza dell’ambiente di programmazione, sono direttamente disponibili agli sviluppatori.&lt;/div&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ToggleDockWndBtn&lt;/span&gt;&amp;nbsp;:&amp;nbsp;Button&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;ToggleDockWndBtn()&amp;nbsp;{&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;OnClick()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//Get&amp;nbsp;dockable&amp;nbsp;window.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;UID&lt;/span&gt;&amp;nbsp;dockWinID&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;UIDClass&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dockWinID.Value&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;@"ESRI_SelectionSample_SelCountDockWin"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s_dockWindow&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ArcMap&lt;/span&gt;.DockableWindowManager.GetDockableWindow(dockWinID);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Creare gli add-ins&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Gli add-ins sono creati utilizzando un IDE come Visual Studio (incluso l’Express) per .NET e Eclipse per Java e semplici wizard e template sono forniti con l’SDK ArcObjects per generare automaticamente progetti add-in con incluso XML e file di classi.&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;In aggiunta, quando questi progetti sono creati, essi automaticamente generano un file add-in pronto per essere copiato in cartelle ben definite degli add-in. La maggior parte dell’XML è compilato tramite il wizard; comunque, se necessario, può essere direttamente modificato. Lo schema associato al file XML permette facili modifiche provvedendo all’IntelliSense e alla validazione al volo. Per maggiori dettagli su come creare gli add-in vedere &lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Walkthrough_Building_custom_UI_elements_using_add_ins/0001000001ms000000/"&gt;qui&lt;/a&gt;.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Come esercizio ho creato un add-in per visualizzare le immagini di Street View di Google cliccando direttamente sulla mappa (dataframe attivo) in ArcMap. &lt;a href="http://resources.arcgis.com/gallery/file/arcobjects-net-api/details?entryID=48F2BB6C-1422-2418-8822-C06E828584E8"&gt;Qui&lt;/a&gt; potete scaricare la soluzione mentre &lt;a href="http://www.youtube.com/watch?v=5X6nTXPbmpw"&gt;qui&lt;/a&gt; potete vedere il video per come installarlo.&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Da notare che in questo add-in è gestita anche la trasformazione di datum a WGS84 (input richiesto da Street View di Google) rispetto al sistema di coordinate che è impostato nel dataframe attivo. Pertanto per dataframe con sistemi di coordinate basati su datum WGS84 non occorre impostare nulla, mentre per sistemi di coordinate non basati su datum WGS84 (esempio Monte Mario) occorre impostare nel dataframe (linguetta Coordinate System - pulsante ‘Transformations…’) la trasformazione da utilizzare per passare a WGS84: l’add-in utilizzerà quella indicata in Transformations nelle proprietà del datafame.&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0pt; text-align: justify;"&gt;Se il dataframe&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;non ha impostato il sistema di coordinate, le coordinate della mappa verranno considerate come coordinate geografiche WGS84 (scelta fatta per evitare messaggi all’utente) . &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-K8VAxs5jb38/TkwhsqCNSpI/AAAAAAAAAOA/Zf-VlqWjpic/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="572" naa="true" src="http://3.bp.blogspot.com/-K8VAxs5jb38/TkwhsqCNSpI/AAAAAAAAAOA/Zf-VlqWjpic/s640/image011.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8323071861123024882-6382587126597307691?l=nicogis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicogis.blogspot.com/feeds/6382587126597307691/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8323071861123024882&amp;postID=6382587126597307691' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/6382587126597307691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/6382587126597307691'/><link rel='alternate' type='text/html' href='http://nicogis.blogspot.com/2011/07/add-in-come-ti-personalizzo-arcgis.html' title='Add-in: come ti personalizzo ArcGIS Desktop'/><author><name>Ing. Domenico Ciavarella</name><uri>http://www.blogger.com/profile/11116200904149667988</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-hc7A5NAVWEU/TbxOnHjqZPI/AAAAAAAAALM/8Mvi5N0jizs/s220/001.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-oXXUZ6dwqqg/TkwgtOWHyQI/AAAAAAAAANk/BnOB6ytQtkg/s72-c/image001.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8323071861123024882.post-731472879356139789</id><published>2011-06-30T11:00:00.749+02:00</published><updated>2011-07-13T20:45:55.981+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arcgis server'/><category scheme='http://www.blogger.com/atom/ns#' term='tokens'/><category scheme='http://www.blogger.com/atom/ns#' term='ssl'/><category scheme='http://www.blogger.com/atom/ns#' term='https'/><title type='text'>Token: se lo conosci non lo eviti</title><content type='html'>Parliamo delle connessioni internet e delle applicazioni web: si ricorda che, dalla versione 10.1, ArcGIS Server sarà un erogatore di servizi GIS (solo a 64bit) esclusivamente su protocollo http e le connessioni locali non saranno più possibili.&lt;br /&gt;ArcGIS Server ti consente di abilitare&amp;nbsp;la sicurezza per le tue applicazione web e i tuoi servizi web. Naturalmente,&amp;nbsp;oltre a queste, possiamo applicare&amp;nbsp;la sicurezza al&amp;nbsp;nostro sistema ArcGIS Server con&amp;nbsp;utenti&amp;nbsp;utilizzati&amp;nbsp;da ArcGIS Server per accedere ai dati,&amp;nbsp;sicurezza con codice eseguito direttamente sul server e sicurezza mediante dispositivi hardware.&lt;br /&gt;Per&amp;nbsp;gestire la sicurezza per i servizi web e le applicazioni web i passi da seguire sono:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;definire la gestione degli utenti&amp;nbsp;e dei ruoli&lt;/li&gt;&lt;li&gt;scegliere un metodo di autenticazione&lt;/li&gt;&lt;li&gt;implementare Secure Sockets Layer (SSL)&lt;/li&gt;&lt;li&gt;impostare i permessi per i servizi e le applicazioni&lt;/li&gt;&lt;/ul&gt;La&amp;nbsp;componente fondamentale di qualsiasi meccanismo di controllo degli accessi è la capacità di autenticare gli utenti. Tutti i meccanismi di autenticazione richiedono che le informazioni degli utenti e dei ruoli ai quali fanno riferimento risiedano centralmente da qualche parte del sistema. Le applicazioni ASP.NET consentono che queste informazioni siano memorizzzate e gestite o dal sistema operativo o da un provider membership ASP.NET. ArcGIS Server utilizza queste due opzioni fornite da ASP.NET.&lt;br /&gt;&lt;br /&gt;La decisione di optare per una piuttosto che per l'altra dipende da contesto di utilizzo. Se, ad esempio, sviluppiamo applicazioni su una intranet, sicuramente vorremo utilizzare già gli utenti/ruoli definiti nel sistema operativo per garantire l'accesso alle applicazioni. Se stiamo sviluppando applicazioni su internet, invece, &amp;nbsp;non vogliamo che gli utenti web siano utenti nella nostra active directory; in questo caso memorizziamo questi utenti nel provider membership ASP.NET.&lt;br /&gt;&lt;br /&gt;ArcGIS Server consente di configurare facilmente il Membership provider di ASP.NET per SQL Server di Microsoft utilizzando ArcGIS Server Manager. Inoltre, essendo molto flessibile, il provider può essere personalizzato per poterlo utilizzare anche con altre fonti dati come&amp;nbsp;altri database, file xml, ldap ecc.&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx"&gt;Qui&lt;/a&gt; potete vedere come implementare un provider personalizzato.&lt;br /&gt;&lt;br /&gt;Quindi riepilogando abbiamo:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;utenti e ruoli definiti a livello di sistema operativo&lt;/li&gt;&lt;li&gt;membership provider di ASP.NET &lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Microsoft SQL Server (configurabile utilizzando ArcGIS Server Manager)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Personalizzato (configurato dall'amministratore/sviluppatore e poi integrato in ArcGIS Server Manager)&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;L'autenticazione è il processo tramite il quale il sistema verifica l'identità dell'utente che intende accedere al sistema mediante user e password. Il metodo di autenticazione determina come il server valida l'identità dell'utente.&lt;br /&gt;&lt;br /&gt;Per informazioni memorizzate a livello di sistema operativo l'autenticazione avviene con metodo IIS mentre, utilizzando il Membership Provider ASP.NET, l'autenticazione avviene con metodo ASP.NET.&lt;br /&gt;&lt;br /&gt;I metodi di autenticazione&amp;nbsp;variano anche in termini di livello di sicurezza fornita.&lt;br /&gt;I metodi di autenticazione disponibili con ArcGIS server per Micorosoft .NET framework sono:&lt;br /&gt;&lt;br /&gt;Autenticazione IIS:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Autenticazione integrata Windows (utilizzata generamente su intranet; utilizza solo utenti definiti a livello di sistema operativo e, quando si utilizza IE sulla rete locale, l'identità è passata in modo trasparente senza prompt di login. Stesso discorso per i client ARCGIS. Questo consente di connettersi ed utilizzare i servizi senza un esplicito accesso con login);&lt;/li&gt;&lt;li&gt;HTTP Basic e Digest (utilizzata su intranet e internet;&amp;nbsp;utilizza solo utenti definiti a livello di sistema operativo, su browser si ha pop-up di login)&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;Autenticazione ASP.NET:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;autenticazione basata su Forms (utilizzata per applicazioni web quando le informazioni utente sono memorizzate in un membership provider, su browser avremo una form di login su una pagina web)&lt;/li&gt;&lt;li&gt;autenticazione basata su token (implementata da ArcGIS Server, utilizzata solo per servizi web e non per le applicazioni, il client ottiene un token&amp;nbsp;dal server passando user e password e poi il token è utilizzato per accedere al servizio, lavora con utenti memorizzati)&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Importante: per poter supportare più metodi di autenticazione occorre creare&amp;nbsp;istanze multiple di ArcGIS server. Ogni istanza di ArcGIS Server dovrebbe essere legata allo stesso GIS Server ma dovrebbe essere configurata con metodi differenti di autenticazione. Il classico caso è l'utilizzo degli utenti windows su una rete locale e quello degli utenti SQL Server per utenti esterni su internet. In questo caso occorre avere due istanze di ArcGIS Server. Per maggiori dettagli&amp;nbsp;su come implementare più metodi di autenticazione vedete &lt;a href="http://help.arcgis.com/en/arcgisserver/10.0/help/arcgis_server_dotnet_help/0093/0093000000pt000000.htm"&gt;Multiple ArcGIS Server Web instances for security.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In base alle esigenze di memorizzazione delle informazioni dell'utente e del metodo di autenticazione, potresti avere la necessità di acquistare un certificato SSL per il tuo web server. SSL abilita l'utilizzo dell'HTTPS che cripta la comunicazione tra i client e il tuo web server. L'HTTPS è il risultato dell'applicazione di un protocollo di crittografia (SSL o TLS)&amp;nbsp;al protocollo di trasferimento HTTP. Chiaramente, quando gli utenti si autenticano con i metodi di autenticazione HTTP basic, basato su token o basato su forms, SSL può aumentare la sicurezza delle credenziali perchè il passaggio delle informazioni avviene in modo criptato, aumentando il livello di sicurezza di attacchi del tipo&amp;nbsp;&lt;a href="http://it.wikipedia.org/wiki/Man_in_the_middle"&gt;man in the middle&lt;/a&gt;. Proprio&amp;nbsp;MITM è utilizzato ad esempio da &lt;a href="http://www.fiddler2.com/fiddler/help/httpsdecryption.asp"&gt;fiddler&lt;/a&gt;&amp;nbsp;per decifrare il traffico HTTPS: in sostanza fiddler fa da proxy tra il browser ed il server web. Fiddler comunica con il server web&amp;nbsp;mediante il&amp;nbsp;certificato valido&amp;nbsp;mentre con il browser comunica emettendo un suo certificato per poter decifrare il traffico. Ovviamente il browser ti avverte che il certificato di fiddler non è valido ma accettandolo possiamo eseguire la nostra analisi di traffico su https. Per non ricevere più warning possiamo installare il certificato di fiddler&amp;nbsp;nel browser (raccomandato solo su macchine di test). Per maggiori dettagli sui certificati digitali seguite il &lt;a href="http://it.wikipedia.org/wiki/Certificato_digitale"&gt;link&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Per gli utenti che accedono ai servizi o alle applicazioni, devi aggiungere permessi nei servizi o nelle applicazioni per&amp;nbsp;un ruolo nel quale l'utente è membro. I permessi di ArcGIS Server sono basati su ruoli. Pertanto, per aggiungere permessi per&amp;nbsp;un servizio, per una cartella servizio o per l'applicazione nel manager&amp;nbsp;occorre usare&amp;nbsp;i ruoli piuttosto che i permessi dei singoli&amp;nbsp;utenti.&lt;br /&gt;&lt;br /&gt;Quando si applica la sicurezza ad un servizio, essa è applicata a tutte le forme di quel servizio: SOAP, REST e OGC (come ad esempio il WMS). Consentendo l'accesso ad esempio al ruolo Tecnici ad un servizio da manager, fai sì che gli utenti appartenenti a quel ruolo&amp;nbsp;siano abilitati ad accedere attraverso i metodi SOAP, REST e OGC abilitati per il servizio. Analogamente, la services directory&amp;nbsp;rispetta le impostazioni di sicurezza così, una volta che l'utente si è autenticato, potrà vedere solo i servizi per i quali&amp;nbsp;ha l'accesso.&lt;br /&gt;&lt;br /&gt;Vediamo ora più nel dettaglio l'autenticazione con il servizio di token fornito da ArcGIS Server. Come abbiamo visto, con l'autenticazione basata su token si utilizza l'autenticazione ASP.NET (SQL Server o un altro provider personalizzato per la memorizzazione di utenti e ruoli). &lt;br /&gt;Un&amp;nbsp; token si attua come una chiave di accesso ai servizi protetti ed è esclusivamente fornito agli utenti autenticati. Il token è una stringa che cripta delle informazioni che contengono nome dell'utente, periodo di scadenza ed altre informazioni. Il token è fornito all'utente autenticato attraverso i servizi web disponibili in -Istanza ArcGI Server-/Tokens.&lt;br /&gt;&lt;br /&gt;Il token fornisce un certo livello di sicurezza per i tuoi servizi gis ma non è certamente più sicuro di altri metodi come un'autenticazione integrata windows. La protezione del tuo sistema con i token dipende dal controllo di accesso ai token. Questo in pratica si traduce nel fatto di far circolare le informazioni su un canale protetto, come precedentemente accennato, utilizzando l'HTTPS. Inoltre è possibile richiedere che tutte le richieste, oltre a quella richiesta per il token, circolino su canale protetto. In questo caso, tramite Manager o ArcCatalog,&amp;nbsp;è possibile impostare &lt;strong&gt;Require Encryped Web Access&amp;nbsp;&lt;/strong&gt;nelle proprietà del folder dei servizi indicati.&lt;br /&gt;&lt;br /&gt;Il servizio di token è un servizio web che è installato con la componente ARCGIS Web application durante l'installazione di ArcGIS server. Nella versione 10, il servizio di token è automaticamente abilitato quando necessario. E' abilitato se gli utenti sono memorizzati in un Membership provider. Non è abilitato o utilizzato quando specifichi utenti windows per l'autenticazione dei servizi GIS a meno che utilizzi Membership Provider per i ruoli e abiliti i token per l'autenticazione utente.&lt;br /&gt;&lt;br /&gt;Quando il servizio di token è abilitato, puoi impostare un valore massimo consentito di time-out per i token, ovverosia&amp;nbsp;il periodo di tempo oltre il quale il token non è più&amp;nbsp;valido.&lt;br /&gt;E' possibile anche impostare la chiave (Shared key) per criptare il token. Questa chiave è utilizzata per decriptare il token che arriva dal client e verifica l'identita del client. Questa chiave serve per verificare che il server&amp;nbsp;abbia creato il token. Il token è criptato con una chiave utilizzando il metodo di criptazione AES. I 16 caratteri impostati (gli altri non vengono utilizzati) rappresentano i 128 bit utilizzati per la criptazione.&lt;br /&gt;&lt;br /&gt;Quando i token sono richiesti per i servizi GIS, i client seguono il seguente approccio:&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Il client fa una richiesta al servizio GIS&lt;/li&gt;&lt;li&gt;il server GIS risponde che un token è richiesto e fornisce l'url del servizio di token&lt;/li&gt;&lt;li&gt;il client richiede il token dal servizio di token fornendo user e password&lt;/li&gt;&lt;li&gt;il servizio di token valida la user e password con il Membership provider impostato e, se&amp;nbsp;valido, restituisce un token al client&lt;/li&gt;&lt;li&gt;il client fa le richieste al servizio GIS ed include il token con la richiesta&lt;/li&gt;&lt;li&gt;il server GIS valida il token ed invia la risposta per il servizio richiesto dal client&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Per consentire l'utilizzo dei servizi GIS senza fornire un token o una login occorre assegnare al servizio il ruolo di Everyone.&lt;br /&gt;&lt;br /&gt;Quando il servizio token è abilitato e richiesto per accedere ai servizi, il client deve essere in grado di ottenere ed usare il token come visto nei passi descritti precedentemente. I client ESRI ottengono ed utilizzano il token automaticamente.&lt;br /&gt;&lt;br /&gt;Per ArcGIS Desktop, ArcGIS Explorer e le applicazioni Web ADF, l'utente inserisce la user e la password nella finestra di dialogo della connessione per accedere al servizio. L'applicazione automaticamente si prende cura di comunicare con il servizio di token ed acquisire un valido token. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-lPuTDhQHgoo/ThCcbhZDPgI/AAAAAAAAANQ/bmQvOP-5-XU/s1600/arccatalogtoken.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="412" src="http://4.bp.blogspot.com/-lPuTDhQHgoo/ThCcbhZDPgI/AAAAAAAAANQ/bmQvOP-5-XU/s640/arccatalogtoken.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Le applicazioni basate su SOAP necessitano di acquisire ed utilizzare esplicitamente i token, verificandone la validità di volta in volta.&lt;br /&gt;&lt;br /&gt;Le applicazioni basate su REST (javascript, Silverlight/WPF e Flex, SharePoint), poichè sono applicazioni che vengono eseguite lato client, possono essere analizzate da chiuque e pertanto non è opportuno memorizzare la user e la password per accedere al servizio nell'applicazione. Pertanto un token può essere ottenuto dal servizio di token. Il token poi è incluso nella richiesta al servizio.&lt;br /&gt;&lt;br /&gt;Occorre ricordare che non vanno confuse le credenziali di accesso all'applicazione&amp;nbsp;con quelle di accesso al token. L'applicazione utilizza il token poichè sono state memorizzate in&amp;nbsp;essa&amp;nbsp;la user e la password di un ruolo autorizzato ad utilizzare il/i servizio/i.&amp;nbsp;L'applicazione inoltre può essere protetta&amp;nbsp;mediante login basata &amp;nbsp;su utenti che possono anche non avere diretto accesso ai servizi. Quando si utilizza l'autenticazione IIS (utenti memorizzati in Windows) le credenziali di accesso sono passata automaticamente dall'applicazione ai servizi GIS.&lt;br /&gt;&lt;br /&gt;Nelle impostazioni di protezione&amp;nbsp;nel Manager, possiamo impostare il time-out dei token. Come abbiamo accennato, il time-out del token è il periodo di tempo che il token rimane valido. Una volta che non è più valido, se viene utilizzato ugualmente, verrà visualizzato un errore.&lt;br /&gt;Possiamo avere due tipi di scadenza&amp;nbsp;di valida per il&amp;nbsp;token:&lt;br /&gt;&lt;strong&gt;Token a&amp;nbsp;breve durata&lt;/strong&gt;: forniscono una maggiore protezione poichè limitano l'utilizzo non autorizzato. Se ad esempio un&amp;nbsp;hacker tiene monitorato la comunicazione tra l'utente ed il server, potrebbe visualizzare il token ed utilizzarlo però, se il tempo di validità è basso, l'utilizzo sarà limitato. Lo svantaggio dei token a breve durata è che lo sviluppatore dovrà richiedere un nuovo token prima che il token perda validità.&lt;br /&gt;&lt;strong&gt;Token a lunga durata&lt;/strong&gt;: questo time-out normalmente è utilizzato dalle applicazioni basate su REST. La validità del token è più duratura rispetto ai token di breve durata. Per ottenere un token di lunga durata, il client deve includere nella richiesta al servizio di token un client ID e un&amp;nbsp;tempo di validità. Il client ID può essere o l'IP del client o il Referrer URL Web (cioè l'url dell'applicazione web che si sta utilizzando). Se non si specifica il periodo di validità, il token verrà considerato di breve durata.&lt;br /&gt;&lt;br /&gt;Come si accennava precedentemente, un modo per minimizzare l'uso non autorizzato dei token è richiedere l'utilizzo dell'HTTPS (SSL) per tutte le comunicazioni con i servizi GIS.&lt;br /&gt;&lt;br /&gt;Si pensi ad esempio ad un servizio GIS abilitato all'editing (Feature Service): se non fosse protetto, potrebbe essere utilizzato da chiunque per modificare i dati.&lt;br /&gt;&lt;br /&gt;Per richiedere il token al server, occorre fare una richiesta URL.&lt;br /&gt;&lt;br /&gt;La richiesta per farsi restituire&amp;nbsp;il token dal server è la seguente:&lt;br /&gt;&lt;br /&gt;&lt;div id="GUID-BAF0931E-A7EF-4115-B622-7AA39B85DB42"&gt;&lt;a href="https://myserver.example.com/arcgis/tokens?request=gettoken&amp;amp;username=myuser&amp;amp;password=secret1&amp;amp;clientid=ref.myserver.example.com&amp;amp;expiration=1440&amp;amp;f=json&amp;amp;callback=myfunction"&gt;https://myserver.example.com/arcgis/tokens?request=gettoken&amp;amp;username=myuser&amp;amp;password=secret1&amp;amp;clientid=ref.myserver.example.com&amp;amp;expiration=1440&amp;amp;f=json&amp;amp;callback=myfunction&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;request&lt;/strong&gt;: il valore&amp;nbsp;di questo parametro è gettoken (obbligatorio)&lt;br /&gt;&lt;strong&gt;username&lt;/strong&gt;: la username&amp;nbsp;di un utente abilitato&amp;nbsp;all'accesso di uno o più servizi (obbligatorio)&lt;br /&gt;&lt;strong&gt;password&lt;/strong&gt;: la password dell'utente (obbligatorio)&lt;br /&gt;&lt;strong&gt;clientid&lt;/strong&gt;: è un parametro opzionale. Si utilizza un "." per dividere il tipo dal valore passato&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;ip&lt;/strong&gt;: indirizzo ip del client. Esempio clientid=ip.10.14.100.38&lt;/li&gt;&lt;li&gt;&lt;strong&gt;ref&lt;/strong&gt;: la base dell'url dell'applicazione. Esempio clientid=ref.http://myserver/myApp&lt;/li&gt;&lt;li&gt;&lt;strong&gt;requestip&lt;/strong&gt;: il token è generato per l'IP da dove la richiesta ha avuto origine. Esempio clientid=requestip&lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;expiration&lt;/strong&gt;:&amp;nbsp;facoltativo. Specifica la durata di validita del token. Se non specificato, il token verrà considerato con impostazione di&amp;nbsp;breve durata.&lt;br /&gt;&lt;strong&gt;f&lt;/strong&gt;: restituisce il risultato in formato json. Facoltativo ed aggiunto a partire dalla 10sp1&lt;br /&gt;&lt;strong&gt;callback&lt;/strong&gt;: facoltativo. Specifica la funzione di callback&amp;nbsp;da utilizzare per farsi restituire il risultato. Se specificata, il formato di restituizione è sempre in json.&lt;br /&gt;&lt;br /&gt;Dalla 10 sp1 è possibile utilizzare anche la seguente richiesta:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://myserver.example.com/arcgis/tokens/generateToken?username=myuser&amp;amp;password=mypass&amp;amp;client=referer|ip|requestip&amp;amp;referer=referer&amp;amp;ip=ipaddress&amp;amp;expiration=expiration&amp;amp;f=json&amp;amp;callback=myfunction"&gt;https://myserver.example.com/arcgis/tokens/generateToken?username=myuser&amp;amp;password=mypass&amp;amp;client=referer|ip|requestip&amp;amp;referer=referer&amp;amp;ip=ipaddress&amp;amp;expiration=expiration&amp;amp;f=json&amp;amp;callback=myfunction&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Il servizio di token di default è impostato su connessione che utilizza https. Sebbene non consigliato è possibile, in fase di test, disabilitare l'https. Questo normalmente accade quando si è in fase di test con web server basato su file (Cassini in Visual Studio) che non supportano l'uso di https/ssl.&lt;br /&gt;&lt;br /&gt;Per disabilitare l'https occorre aprire il web.config dell'applicazione di Tokens (-Web server root-\ArcGIS\Tokens\web.config) con notepad e andare nella sezione di appSettings&lt;br /&gt;&lt;br /&gt;&amp;lt;appSettings&amp;gt;&lt;br /&gt;&amp;lt;add key="RequireSSL" value="True" /&amp;gt; &lt;br /&gt;&amp;lt;add key="TokenServiceURL" value="&lt;a href="https://myserver/..."&gt;https://myserver/...&lt;/a&gt;" /&amp;gt;&lt;br /&gt;&amp;lt;appSettings&amp;gt;&lt;br /&gt;&lt;br /&gt;Impostare il parametro RequireSSL a false e cambia da https a http l'url in TokenServiceURL.&lt;br /&gt;Per rendere il servizio di token accessibile su internet, occorre modificare i tre web.config in rest, services e token della tua istanza arcgis server. Occorre aprirli con notepad&amp;nbsp;e cambiare l'url nel parametro TokenServiceURL al nome del dominio in sostituzione di quello della macchina.&lt;br /&gt;&lt;br /&gt;Negli help dei web client ESRI potete vedere nel dettaglio come utilizzare i token:&lt;br /&gt;&lt;a href="http://help.arcgis.com/en/webapi/javascript/arcgis/help/jshelp_start.htm#http://help.arcgis.com/en/webapi/javascript/arcgis/help/jshelp/ags_security.htm"&gt;javascript&lt;/a&gt;&lt;br /&gt;&lt;a href="http://help.arcgis.com/en/webapi/silverlight/help/0166/016600000022000000.htm"&gt;silverlight&lt;/a&gt;&lt;br /&gt;&lt;a href="http://help.arcgis.com/en/webapi/flex/help/017p/017p00000009000000.htm"&gt;flex&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Se le applicazioni sono protette con autenticazione basata su token, è possibile utilizzare una pagina di proxy che gestisce la comunicazione tra i servizi ArcGIS Server e la nostra applicazione. Questo permette di non trasmettere il token dal client. La pagina di&amp;nbsp;proxy (codice server-side) riceve la richiesta dal client e la gira ai servizi gis utilizzando il token&amp;nbsp;memorizzato in essa.&lt;br /&gt;Qui potete scaricare e configurare la pagina proxy:&lt;br /&gt;&lt;a href="http://help.arcgis.com/en/webapi/javascript/arcgis/help/jshelp/proxypage_net.zip"&gt;ASP.NET&lt;/a&gt;&lt;br /&gt;&lt;a href="http://help.arcgis.com/en/webapi/javascript/arcgis/help/jshelp/proxypage_java.zip"&gt;Java/JSP&lt;/a&gt;&lt;br /&gt;&lt;a href="http://help.arcgis.com/en/webapi/javascript/arcgis/help/jshelp/proxypage_php.zip"&gt;PHP&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In questo link potete scaricare una versione modificata del proxy page ESRI per poter far chiamate&amp;nbsp;dalla pagina di proxy e richiedere il token senza memorizzarlo nel file di configurazione.&lt;br /&gt;&lt;a href="http://forums.arcgis.com/attachment.php?attachmentid=7555&amp;amp;d=1309379305"&gt;proxyConTokenDinamico&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In pratica, ho aggiunto la richiesta&amp;nbsp;di token come visto precedentemente&lt;br /&gt;&lt;br /&gt;&lt;div id="GUID-BAF0931E-A7EF-4115-B622-7AA39B85DB42"&gt;&lt;a href="https://myserver.example.com/arcgis/tokens?request=gettoken&amp;amp;username=myuser&amp;amp;password=secret1&amp;amp;clientid=ref.myserver.example.com&amp;amp;expiration=1440&amp;amp;f=json&amp;amp;callback=myfunction"&gt;https://myserver.example.com/arcgis/tokens?request=gettoken&amp;amp;username=myuser&amp;amp;password=secret1&amp;amp;clientid=ref.myserver.example.com&amp;amp;expiration=1440&amp;amp;f=json&amp;amp;callback=myfunction&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;GetToken(&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;uri)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt;&amp;nbsp;(ServerUrl&amp;nbsp;su&amp;nbsp;&lt;span style="color: blue;"&gt;in&lt;/span&gt;&amp;nbsp;serverUrls)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(su.MatchAll&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;uri.StartsWith(su.Url,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;StringComparison&lt;/span&gt;.InvariantCultureIgnoreCase)&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;su.DynamicToken)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;Code&amp;nbsp;to&amp;nbsp;dynamically&amp;nbsp;get&amp;nbsp;the&amp;nbsp;token&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;tokenService&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515;"&gt;"https://{0}/arcgis/tokens?request=getToken&amp;amp;username={1}&amp;amp;password={2}&amp;amp;expiration=30"&lt;/span&gt;,&amp;nbsp;su.Host,&amp;nbsp;su.UserName,&amp;nbsp;su.Password);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;token;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;This&amp;nbsp;script&amp;nbsp;is&amp;nbsp;added&amp;nbsp;to&amp;nbsp;force&amp;nbsp;the&amp;nbsp;application&amp;nbsp;to&amp;nbsp;certify&amp;nbsp;the&amp;nbsp;SSL&amp;nbsp;script&amp;nbsp;(if&amp;nbsp;for&amp;nbsp;example&amp;nbsp;you&amp;nbsp;have&amp;nbsp;a&amp;nbsp;self&amp;nbsp;certificate&amp;nbsp;on&amp;nbsp;server)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Net.&lt;span style="color: #2b91af;"&gt;ServicePointManager&lt;/span&gt;.ServerCertificateValidationCallback&amp;nbsp;+=&amp;nbsp;&lt;span style="color: blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;System.Security.Cryptography.X509Certificates.&lt;span style="color: #2b91af;"&gt;X509Certificate&lt;/span&gt;&amp;nbsp;certificate,&amp;nbsp;System.Security.Cryptography.X509Certificates.&lt;span style="color: #2b91af;"&gt;X509Chain&lt;/span&gt;&amp;nbsp;chain,&amp;nbsp;System.Net.Security.&lt;span style="color: #2b91af;"&gt;SslPolicyErrors&lt;/span&gt;&amp;nbsp;sslPolicyErrors)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Net.&lt;span style="color: #2b91af;"&gt;WebRequest&lt;/span&gt;&amp;nbsp;tokenRequest&amp;nbsp;=&amp;nbsp;System.Net.&lt;span style="color: #2b91af;"&gt;WebRequest&lt;/span&gt;.Create(tokenService);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Net.&lt;span style="color: #2b91af;"&gt;WebResponse&lt;/span&gt;&amp;nbsp;tokenResponse&amp;nbsp;=&amp;nbsp;tokenRequest.GetResponse();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.IO.&lt;span style="color: #2b91af;"&gt;Stream&lt;/span&gt;&amp;nbsp;responseStream&amp;nbsp;=&amp;nbsp;tokenResponse.GetResponseStream();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.IO.&lt;span style="color: #2b91af;"&gt;StreamReader&lt;/span&gt;&amp;nbsp;readStream&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;System.IO.&lt;span style="color: #2b91af;"&gt;StreamReader&lt;/span&gt;(responseStream);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;token&amp;nbsp;=&amp;nbsp;readStream.ReadToEnd();&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;token;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(su.MatchAll&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;uri.StartsWith(su.Url,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;StringComparison&lt;/span&gt;.InvariantCultureIgnoreCase))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;su.Token;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;.Compare(uri,&amp;nbsp;su.Url,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;StringComparison&lt;/span&gt;.InvariantCultureIgnoreCase)&amp;nbsp;==&amp;nbsp;0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;su.Token;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(mustMatch)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;InvalidOperationException&lt;/span&gt;();&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;br /&gt;Per fare i propri controlli sul certificato ssl, è possibile utilizzare ServerCertificateValidationCallback, ad esempio per forzare la validità, come nel caso qui sopra, se ci troviamo con un certificato non scaduto ma non rilasciato da un ente riconosciuto (caso di autocertificati)&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;&lt;span style="color: green;"&gt;//&amp;nbsp;This&amp;nbsp;script&amp;nbsp;is&amp;nbsp;added&amp;nbsp;to&amp;nbsp;force&amp;nbsp;the&amp;nbsp;application&amp;nbsp;to&amp;nbsp;certify&amp;nbsp;the&amp;nbsp;SSL&amp;nbsp;script&amp;nbsp;(if&amp;nbsp;for&amp;nbsp;example&amp;nbsp;you&amp;nbsp;have&amp;nbsp;a&amp;nbsp;self&amp;nbsp;certificate&amp;nbsp;on&amp;nbsp;server)&lt;/span&gt;&lt;br /&gt;System.Net.&lt;span style="color: #2b91af;"&gt;ServicePointManager&lt;/span&gt;.ServerCertificateValidationCallback&amp;nbsp;+=&amp;nbsp;&lt;span style="color: blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;System.Security.Cryptography.X509Certificates.&lt;span style="color: #2b91af;"&gt;X509Certificate&lt;/span&gt;&amp;nbsp;certificate,&amp;nbsp;System.Security.Cryptography.X509Certificates.&lt;span style="color: #2b91af;"&gt;X509Chain&lt;/span&gt;&amp;nbsp;chain,&amp;nbsp;System.Net.Security.&lt;span style="color: #2b91af;"&gt;SslPolicyErrors&lt;/span&gt;&amp;nbsp;sslPolicyErrors)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;};&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Via SOAP possiamo utilizzare RequiresTokens del servizio Catalog:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;Catalog&amp;nbsp;myCatalog&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;Catalog();&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myCatalog.Url&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;"http://localhost/arcgis/services"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;myToken&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(myCatalog.RequiresTokens())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;tokenServiceUrl&amp;nbsp;=&amp;nbsp;myCatalog.GetTokenServiceURL();&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;url&amp;nbsp;=&amp;nbsp;tokenServiceUrl&amp;nbsp;+&amp;nbsp;&lt;span style="color: #a31515;"&gt;"?request=getToken&amp;amp;username=myuser&amp;amp;password=secret"&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Net.&lt;span style="color: #2b91af;"&gt;WebRequest&lt;/span&gt;&amp;nbsp;request&amp;nbsp;=&amp;nbsp;System.Net.&lt;span style="color: #2b91af;"&gt;WebRequest&lt;/span&gt;.Create(url);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Net.&lt;span style="color: #2b91af;"&gt;WebResponse&lt;/span&gt;&amp;nbsp;response&amp;nbsp;=&amp;nbsp;request.GetResponse();&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.IO.&lt;span style="color: #2b91af;"&gt;Stream&lt;/span&gt;&amp;nbsp;responseStream&amp;nbsp;=&amp;nbsp;response.GetResponseStream();&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.IO.&lt;span style="color: #2b91af;"&gt;StreamReader&lt;/span&gt;&amp;nbsp;readStream&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;System.IO.&lt;span style="color: #2b91af;"&gt;StreamReader&lt;/span&gt;(responseStream);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myToken&amp;nbsp;=&amp;nbsp;readStream.ReadToEnd();&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MapService_MapServer&amp;nbsp;mapservice&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;MapService_MapServer();&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mapservice.Url&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515;"&gt;"http://localhost/arcgis/services/MapService/MapServer{0}"&lt;/span&gt;,&lt;span style="color: blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(myToken)?&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Empty,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"?token="&lt;/span&gt;&amp;nbsp;+&amp;nbsp;myToken);&lt;/pre&gt;&lt;br /&gt;Se il token è scaduto o invalido (codice 498) o richiesto (codice 499) nella gestiore errori si richiede un nuovo token:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;&lt;span style="color: blue;"&gt;try&lt;/span&gt;&amp;nbsp;{&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mapimg&amp;nbsp;=&amp;nbsp;mapservice.ExportMapImage(mapdesc,&amp;nbsp;imgdesc);&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span style="color: blue;"&gt;catch&lt;/span&gt;&amp;nbsp;(System.Net.&lt;span style="color: #2b91af;"&gt;WebException&lt;/span&gt;&amp;nbsp;webExc)&amp;nbsp;{&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Net.&lt;span style="color: #2b91af;"&gt;HttpWebResponse&lt;/span&gt;&amp;nbsp;webResp&amp;nbsp;=&amp;nbsp;webExc.Response&amp;nbsp;&lt;span style="color: blue;"&gt;as&lt;/span&gt;&amp;nbsp;System.Net.&lt;span style="color: #2b91af;"&gt;HttpWebResponse&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(webResp&amp;nbsp;!=&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;)&amp;nbsp;{&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;statusCode&amp;nbsp;=&amp;nbsp;(&lt;span style="color: blue;"&gt;int&lt;/span&gt;)webResp.StatusCode;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(statusCode&amp;nbsp;==&amp;nbsp;498&amp;nbsp;||&amp;nbsp;statusCode&amp;nbsp;==&amp;nbsp;499)&amp;nbsp;{&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;call&amp;nbsp;a&amp;nbsp;method&amp;nbsp;(not&amp;nbsp;shown&amp;nbsp;here)&amp;nbsp;that&amp;nbsp;obtains&amp;nbsp;a&amp;nbsp;new&amp;nbsp;token&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;newToken&amp;nbsp;=&amp;nbsp;getToken();&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mapservice.Url&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;"http://MyWebServer/arcgis/services/MapService/MapServer?token="&lt;/span&gt;&amp;nbsp;+&amp;nbsp;newToken;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mapimg&amp;nbsp;=&amp;nbsp;mapservice.ExportMapImage(mapdesc,&amp;nbsp;imgdesc);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;}&amp;nbsp;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8323071861123024882-731472879356139789?l=nicogis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicogis.blogspot.com/feeds/731472879356139789/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8323071861123024882&amp;postID=731472879356139789' title='3 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/731472879356139789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/731472879356139789'/><link rel='alternate' type='text/html' href='http://nicogis.blogspot.com/2011/06/token-se-lo-conosci-non-lo-eviti.html' title='Token: se lo conosci non lo eviti'/><author><name>Ing. Domenico Ciavarella</name><uri>http://www.blogger.com/profile/11116200904149667988</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-hc7A5NAVWEU/TbxOnHjqZPI/AAAAAAAAALM/8Mvi5N0jizs/s220/001.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-lPuTDhQHgoo/ThCcbhZDPgI/AAAAAAAAANQ/bmQvOP-5-XU/s72-c/arccatalogtoken.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8323071861123024882.post-9181449311772687073</id><published>2011-05-31T16:24:00.004+02:00</published><updated>2011-06-18T11:25:08.299+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arcpy geoprocessing'/><title type='text'>Arcpy per tutti</title><content type='html'>Arcpy, introdotto con la versione 10, è un site-package ovverosia un termine Python per&amp;nbsp;indicare&amp;nbsp;una libreria che aggiunge funzioni aggiuntive a&amp;nbsp;Python.&lt;br /&gt;&lt;br /&gt;Un modulo è un file di Python che normalmente include diverse funzioni e classi. Arcpy è supportato da diversi moduli&amp;nbsp;tra i quali&amp;nbsp;un modulo per il mapping (&lt;a href="http://help.arcgis.com/en/arcgisdesktop/10.0/help/0000/0000000285wv000000.htm"&gt;arcpy.mapping&lt;/a&gt;), uno per l'analisi spaziale (&lt;a href="http://help.arcgis.com/en/arcgisdesktop/10.0/help/0000/0000000285wz000000.htm"&gt;arcpy.sa&lt;/a&gt;) ed un altro per l'analisi geostatistica (&lt;a href="http://help.arcgis.com/en/arcgisdesktop/10.0/help/0000/0000000285ww000000.htm"&gt;arcpy.ga&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Qui potete trovare l'elenco delle &lt;a href="http://help.arcgis.com/en/arcgisdesktop/10.0/help/0000/00000002r8p4000000.htm"&gt;classi&lt;/a&gt;&amp;nbsp;e delle &lt;a href="http://help.arcgis.com/en/arcgisdesktop/10.0/help/0000/00000002r8n7000000.htm"&gt;funzioni&lt;/a&gt;&amp;nbsp;in arcpy.&lt;br /&gt;&lt;br /&gt;ArcPy fornisce l'accesso&amp;nbsp;agli strumenti di &amp;nbsp;geoprocessing&amp;nbsp;così come alle funzioni, classi e moduli che consentono di creare semplici e complessi&amp;nbsp;&amp;nbsp;flussi di lavoro velocemente e facilmente.&lt;br /&gt;&lt;br /&gt;ArcPy sfrutta l'accesso a numerosi moduli di Python sviluppati da professionisti e programmatori GIS&amp;nbsp;di differenti discipline.&amp;nbsp; Inoltre il vantaggio di utilizzare ArcPy&amp;nbsp;con Python è che quest'ultimo è un linguaggio di programmazione&amp;nbsp;general purpose, facile da imparare ed utilizzare. Esso è&amp;nbsp;interpretato anche se, &amp;nbsp;al dir il vero, il compilatore Python trasforma il codice sorgente in un codice intermedio (bytecode), una sorta di&amp;nbsp;"codice-macchina" per una macchina virtuale&amp;nbsp;ottimizzata apposta per eseguire programmi Python; l'interprete Python vero e proprio é una implementazione in software di questa macchina virtuale: pertanto, se tecnicamente è un linguaggio interpretato, questo&amp;nbsp;risulta molto veloce. Inoltre Python è a tipizzazione dinamica, che fornisce agevolmente la possibilità&amp;nbsp;di creare prototipi velocemente e script di test in un ambiente interattivo, mentre è ancora abbastanza potente da supportare la creazione di applicazioni complesse .&lt;br /&gt;&lt;br /&gt;ArcPy è organizzato in strumenti, funzioni, classi, e moduli.&lt;br /&gt;&lt;br /&gt;&lt;div id="GUID-71E0C2C4-CC96-4B42-AE5C-9DC2A4615574"&gt;Tecnicamente parlando, gli strumenti di geoprocessing&amp;nbsp;sono funzioni disponibili&amp;nbsp;da &lt;span class="usertext"&gt;arcpy&lt;/span&gt;, e pertanto sono accessibili come le altre funzioni di Python. Occorre però, per evitare di fare confusione, fare una distinzione tra gli strumenti e le funzioni non-strumenti (come, ad esempio, una funzione di utility: &lt;span class="usertext"&gt;ListFeatureClasses()&lt;/span&gt;). &lt;/div&gt;&lt;br /&gt;&lt;ul id="UL_8B8A837C7D3B4AE08310ADC165EA4B83" purpose="ul"&gt;&lt;li id="LI_896BED9F86AF4E7BB2ADFD259D2451D1" purpose="li"&gt;Gli strumenti sono documentati in modo differente dalle funzioni. Ogni strumento ha la sua propria pagina di riferimento nell' help di sistema di ArcGIS Desktop. Le funzioni sono documentate nella documentazione di&amp;nbsp;ArcPy.&lt;/li&gt;&lt;li id="LI_9EDE4726AED24A689E3562840C62236F" purpose="li"&gt;Gli strumenti restituiscono un risultato&amp;nbsp;object; le funzioni no.&lt;/li&gt;&lt;li id="LI_3BC894CD7A6B444EB53479249C240151" purpose="li"&gt;Gli strumenti generano messaggi, accessibili attraverso&amp;nbsp;diverse funzioni&amp;nbsp;tipo &lt;span class="usertext"&gt;GetMessages()&lt;/span&gt;. Le funzioni non generano messaggi.&lt;/li&gt;&lt;li id="LI_C26B6E975EB0439DA926597A4E1BD33C" purpose="li"&gt;Gli strumenti sono licenziati per livello di prodotto (ArcView, ArcEditor,&amp;nbsp;e ArcInfo) e per livello di estensione (Network Analyst, Spatial Analyst, e così via). E' possibile trovare quale livello di licenza è richiesto nella pagina di riferimento degli strumenti. Le funzioni non sono licenziate ma installate con ArcPy.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Ma dove scriviamo il nostro codice Python?&lt;br /&gt;In ArcGIS abbiamo la Python Window dove possiamo esercitarci ed eseguire le nostre istruzioni. Oppure possiamo utilizzare un IDE come ad esempio PythonWin (che potete trovare nel&amp;nbsp;dvd di installazione e che non viene installato automaticamente da ArcGIS).&lt;br /&gt;Tra gli IDE commerciali quello che vi consiglio è &lt;a href="http://www.wingware.com/"&gt;Wing IDE&lt;/a&gt;&amp;nbsp;mentre tra quelli freeware &lt;a href="http://code.google.com/p/pyscripter/"&gt;PyScripter&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In questo &lt;a href="http://resources.arcgis.com/gallery/file/geoprocessing/details?entryID=E659B67B-1422-2418-A0FE-4F1642052299"&gt;link&lt;/a&gt; potete scaricare un pdf e una serie di esercizi&amp;nbsp;per imparare ad utilizzare Python in ArcGIS.&lt;br /&gt;&lt;br /&gt;Per gli sviluppatori ArcGIS Server: in questo &lt;a href="http://blogs.esri.com/Dev/blogs/arcgisserver/archive/2011/04/12/An-introduction-to-arcpy.mapping-for-ArcGIS-Server-developers.aspx"&gt;link&lt;/a&gt; potete vedere&amp;nbsp;degli esempi&amp;nbsp;di utilizzo di arcpy con servizi di geoprocessing.&amp;nbsp;In questo caso possiamo utilizzare una più semplice e rapida alternativa alla creazione di SOE per ArcGIS Server.&lt;br /&gt;&lt;br /&gt;Vediamo un semplice esempio di codice arcpy richiamato da c#. In questo caso creiamo un tool che verifica se un mxd è adatto ad essere publicato in ArcGIS Server&lt;br /&gt;&lt;br /&gt;Creiamo una toolbox in ArcMap&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-MP1S8QS00S8/TeuokpuiegI/AAAAAAAAAMk/ACcx_zCQvOs/s1600/01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="576px" src="http://3.bp.blogspot.com/-MP1S8QS00S8/TeuokpuiegI/AAAAAAAAAMk/ACcx_zCQvOs/s640/01.jpg" width="640px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-1NxmIs86apg/TeuommRq9VI/AAAAAAAAAMo/-8sdY57z2-Q/s1600/02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="422px" src="http://4.bp.blogspot.com/-1NxmIs86apg/TeuommRq9VI/AAAAAAAAAMo/-8sdY57z2-Q/s640/02.jpg" width="640px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-4p9qZHF2y5o/TeuopNmYz-I/AAAAAAAAAMs/t09ebJ7ErYc/s1600/03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="424px" src="http://4.bp.blogspot.com/-4p9qZHF2y5o/TeuopNmYz-I/AAAAAAAAAMs/t09ebJ7ErYc/s640/03.jpg" width="640px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Aggiungiamo&amp;nbsp;lo script python che utilizza arcpy&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-6Na18ErlmaQ/TeuoqdpoVjI/AAAAAAAAAMw/PQeUnrP_2dk/s1600/04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="476px" src="http://3.bp.blogspot.com/-6Na18ErlmaQ/TeuoqdpoVjI/AAAAAAAAAMw/PQeUnrP_2dk/s640/04.jpg" width="640px" /&gt;&lt;/a&gt;&lt;/div&gt;Indichiamo nome e label&amp;nbsp;al tool. Selezioniamo la voce 'Store relative path names' che ci permette di poter spostare la nostra toolbox senza avere problemi di percorsi.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-iTReF0FrICU/Teuos1p5mBI/AAAAAAAAAM0/8O-2_AZkPBI/s1600/05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640px" src="http://4.bp.blogspot.com/-iTReF0FrICU/Teuos1p5mBI/AAAAAAAAAM0/8O-2_AZkPBI/s640/05.jpg" width="492px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-2xORWpQoboo/TeuouaCg2ZI/AAAAAAAAAM4/8boo7-TgWKk/s1600/06.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640px" src="http://3.bp.blogspot.com/-2xORWpQoboo/TeuouaCg2ZI/AAAAAAAAAM4/8boo7-TgWKk/s640/06.jpg" width="490px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;In questo caso abbiamo un solo parametro, richiesto e di input. E' il map document da analizzare. Come data type possiamo indicare ArcMap Document così, se dovessimo utilizzarlo come tool direttamente in ArcGIS in automatico, avremmo un button che sfoglia file di tipo map document automaticamente.﻿&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-PYbSp2ntZPw/TeuowfO3ZnI/AAAAAAAAAM8/CuHn69Xuyag/s1600/07.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640px" src="http://2.bp.blogspot.com/-PYbSp2ntZPw/TeuowfO3ZnI/AAAAAAAAAM8/CuHn69Xuyag/s640/07.jpg" width="492px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;In questa sezione è possibile scrivere codice python per poter fare validazioni sui controlli creati automaticamente nella maschera da ArcGIS quando si crea un tool.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Qui potete vedere l'&lt;a href="http://help.arcgis.com/en/arcgisdesktop/10.0/help/0015/00150000000t000000.htm"&gt;help&lt;/a&gt; a riguardo.﻿&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-gGcDdpYXxqI/TeuoyBgWU5I/AAAAAAAAANA/VPbWv4095kw/s1600/08.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640px" src="http://2.bp.blogspot.com/-gGcDdpYXxqI/TeuoyBgWU5I/AAAAAAAAANA/VPbWv4095kw/s640/08.jpg" width="492px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Testiamo il tool in ArcMap&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-_aq85mOw-5w/TeuozF8eqlI/AAAAAAAAANE/EtIeKATfK7U/s1600/09.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="432px" src="http://1.bp.blogspot.com/-_aq85mOw-5w/TeuozF8eqlI/AAAAAAAAANE/EtIeKATfK7U/s640/09.jpg" width="640px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;In questo caso abbiamo selezionato un documento di mappa con un layer non supportato per la pubblicazione. Vediamo il messaggio: &lt;strong&gt;Layer type is not supported Layer: streets﻿&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Zl_E3nR6TRY/Teuo066yOiI/AAAAAAAAANI/gloXm3cBE94/s1600/10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="368px" src="http://4.bp.blogspot.com/-Zl_E3nR6TRY/Teuo066yOiI/AAAAAAAAANI/gloXm3cBE94/s640/10.jpg" width="640px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Questo è il nostro script python&amp;nbsp;che utilizza il tool.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-4e0ycasNCTY/Teuo23pNa0I/AAAAAAAAANM/jxSKeNV1hkw/s1600/11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="568px" src="http://1.bp.blogspot.com/-4e0ycasNCTY/Teuo23pNa0I/AAAAAAAAANM/jxSKeNV1hkw/s640/11.jpg" width="640px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;e questo è un esempio di come chiamare il tool in c#&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt;&amp;nbsp;Studioat.Samples&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System.Collections.Generic;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System.Linq;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;ESRI.ArcGIS.esriSystem;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;ESRI.ArcGIS.Geodatabase;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;ESRI.ArcGIS.Geoprocessing;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;ESRI.ArcGIS.Geoprocessor;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Program&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;LicenseInitializer&lt;/span&gt;&amp;nbsp;m_AOLicenseInitializer&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;LicenseInitializer&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #2b91af;"&gt;STAThread&lt;/span&gt;()]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;Main(&lt;span style="color: blue;"&gt;string&lt;/span&gt;[]&amp;nbsp;args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//ESRI&amp;nbsp;License&amp;nbsp;Initializer&amp;nbsp;generated&amp;nbsp;code.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_AOLicenseInitializer.InitializeApplication(&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;esriLicenseProductCode&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: #2b91af;"&gt;esriLicenseProductCode&lt;/span&gt;.esriLicenseProductCodeArcEditor&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;esriLicenseExtensionCode&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;});&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Geoprocessor&lt;/span&gt;&amp;nbsp;gp&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Geoprocessor&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gp.AddToolbox(&lt;span style="color: #a31515;"&gt;@"J:\ArcpyTest\Tools\ToolAGS.tbx"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IVariantArray&lt;/span&gt;&amp;nbsp;parameters&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;VarArrayClass&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parameters.Add(&lt;span style="color: #a31515;"&gt;@"J:\ArcpyTest\Test.mxd"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;messageAnalyzeMSD;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ExecuteTask(gp,&amp;nbsp;parameters,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"AnalyzeMSD"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;out&lt;/span&gt;&amp;nbsp;messageAnalyzeMSD);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_AOLicenseInitializer.ShutdownApplication();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;esecuzione&amp;nbsp;task&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;param&amp;nbsp;name=&lt;/span&gt;&lt;span style="color: grey;"&gt;"gp"&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;oggetto&amp;nbsp;geoprocessor&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;param&amp;nbsp;name=&lt;/span&gt;&lt;span style="color: grey;"&gt;"parameters"&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;lista&amp;nbsp;parametri&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;param&amp;nbsp;name=&lt;/span&gt;&lt;span style="color: grey;"&gt;"nameTask"&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;nome&amp;nbsp;task&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;param&amp;nbsp;name=&lt;/span&gt;&lt;span style="color: grey;"&gt;"message"&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;eventuale&amp;nbsp;messagio&amp;nbsp;se&amp;nbsp;il&amp;nbsp;task&amp;nbsp;fallisce&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;restituisce&amp;nbsp;true&amp;nbsp;se&amp;nbsp;il&amp;nbsp;task&amp;nbsp;ha&amp;nbsp;generato&amp;nbsp;errori&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&amp;nbsp;ExecuteTask(&lt;span style="color: #2b91af;"&gt;Geoprocessor&lt;/span&gt;&amp;nbsp;gp,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IVariantArray&lt;/span&gt;&amp;nbsp;parameters,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;nameTask,&amp;nbsp;&lt;span style="color: blue;"&gt;out&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;message)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;message&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IGeoProcessorResult2&lt;/span&gt;&amp;nbsp;geoProcessorResult2&amp;nbsp;=&amp;nbsp;gp.Execute(nameTask,&amp;nbsp;parameters,&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;)&amp;nbsp;&lt;span style="color: blue;"&gt;as&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IGeoProcessorResult2&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IGPMessages&lt;/span&gt;&amp;nbsp;msgs&amp;nbsp;=&amp;nbsp;geoProcessorResult2.GetResultMessages();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;&amp;nbsp;messageErrors&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;msgs.Count;&amp;nbsp;i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;((msgs.GetMessage(i).IsInformational())&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;(msgs.GetMessage(i).Description.StartsWith(&lt;span style="color: #a31515;"&gt;"Errore:&amp;nbsp;"&lt;/span&gt;)))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;messageErrors.Add(msgs.GetMessage(i).Description);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(messageErrors.Count&amp;nbsp;&amp;gt;&amp;nbsp;0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;errors&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Join(&lt;span style="color: #2b91af;"&gt;Environment&lt;/span&gt;.NewLine,&amp;nbsp;messageErrors.ToArray());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;message&amp;nbsp;=&amp;nbsp;errors;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;result;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;catch&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;message&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515;"&gt;"Operazione&amp;nbsp;annullata:&amp;nbsp;errore&amp;nbsp;nell'esecuzione&amp;nbsp;del&amp;nbsp;task&amp;nbsp;'{0}'!"&lt;/span&gt;,&amp;nbsp;nameTask);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;result;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8323071861123024882-9181449311772687073?l=nicogis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicogis.blogspot.com/feeds/9181449311772687073/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8323071861123024882&amp;postID=9181449311772687073' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/9181449311772687073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/9181449311772687073'/><link rel='alternate' type='text/html' href='http://nicogis.blogspot.com/2011/05/arcpy-per-tutti.html' title='Arcpy per tutti'/><author><name>Ing. Domenico Ciavarella</name><uri>http://www.blogger.com/profile/11116200904149667988</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-hc7A5NAVWEU/TbxOnHjqZPI/AAAAAAAAALM/8Mvi5N0jizs/s220/001.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-MP1S8QS00S8/TeuokpuiegI/AAAAAAAAAMk/ACcx_zCQvOs/s72-c/01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8323071861123024882.post-7673693818431448687</id><published>2011-04-30T21:14:00.226+02:00</published><updated>2012-01-02T21:50:17.784+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stackoverflow'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ to SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ to Objects'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQPad'/><category scheme='http://www.blogger.com/atom/ns#' term='Linq'/><title type='text'>LINQPad: Linq ma non solo ...</title><content type='html'>&lt;a href="http://www.linqpad.net/"&gt;LINQPad&lt;/a&gt;, per chi non lo conosce, è un utilissimo programma che permette di interrogare interattivamente i database mediante LINQ.&lt;br /&gt;&lt;br /&gt;LINQPad supporta c# 4.0 ed il framework 4.0:&lt;br /&gt;• LINQ to Objects&lt;br /&gt;• LINQ to SQL e Entity Framework&lt;br /&gt;• LINQ to XML&lt;br /&gt;• Parallel LINQ&lt;br /&gt;&lt;br /&gt;E' possibile inoltre interrogare &lt;br /&gt;• OData / WCF Data Services&lt;br /&gt;• SQL Azure, SQLite and MySQL Enterprise Server&lt;br /&gt;• Microsoft StreamInsight&lt;br /&gt;• Microsoft Dynamics CRM&lt;br /&gt;• Mindscape LightSpeed ORM&lt;br /&gt;•&amp;nbsp;Persino il 'vecchio' SQL&lt;br /&gt;&lt;br /&gt;LINQPad è fornito anche di moltissimi esempi per imparare LINQ.&lt;br /&gt;&lt;br /&gt;Inoltre permette di eseguire istantaneamente espressioni, blocchi di codice o programmi con formattazione dell'output. Questo ti consente di evitare di crearti numerosi progetti di console application per testare le tue espressioni.&lt;br /&gt;&lt;br /&gt;LINQPad è free e può anche essere eseguito senza essere installato. La funzione di autocompletamento è invece a pagamento, ma ad un costo molto contenuto.&lt;br /&gt;&lt;br /&gt;Innanzitutto, l'interfaccia utente è il client che può interfacciarsi a più server. Per ogni query LINQPad crea un separato server; questa classe è eseguita in un suo proprio dominio di applicazione ed esegue la query in isolamento. Tale isolamento evita che interferisca con altre query e con la UI e consente a LINQPad di assicurare un annullamento della query (mediante un abort del thread) senza influenzare altri domini di applicazione.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.linqpad.net/architecture.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="318" src="http://www.linqpad.net/architecture.png" width="700" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;LINPad compila le query utilizzando NET's CSharpCodeProvider o VBCodeProvider (in funzione del linguaggio che si utilizza).&lt;br /&gt;Poichè c# e vb sono tipizzati staticamente, oggetti del database ai quali facciamo riferimento, necessitano di&amp;nbsp;DataContext tipizzati. LINQPad, per un discorso di prestazioni, crea dataContext tipizzati al volo utilizzando Reflection.Emit piuttosto che generare e compilare il codice. E' usato LINQ to SQL&amp;nbsp;rispetto a EF perchè il primo è di un ordine di grandezza nella creazione del metamodello quando è istanziato.&lt;br /&gt;&lt;br /&gt;Vediamo qualche esempio:&lt;br /&gt;&lt;br /&gt;dopo aver effettuato la connessione al nostro database, possiamo fare la nostra interrogazione e vedere immediatamente i risultati.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-emkqax1w-UA/Tc2OnmetRaI/AAAAAAAAALs/fvGUAgML33M/s1600/linqpad1.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" j8="true" src="http://3.bp.blogspot.com/-emkqax1w-UA/Tc2OnmetRaI/AAAAAAAAALs/fvGUAgML33M/s1600/linqpad1.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;vedere la relativa forma lambda&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-PERqi6mIV1A/Tc2PRglZvRI/AAAAAAAAALw/C_dEeYTuRIA/s1600/linqpad2.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" j8="true" src="http://2.bp.blogspot.com/-PERqi6mIV1A/Tc2PRglZvRI/AAAAAAAAALw/C_dEeYTuRIA/s1600/linqpad2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;vedere la relativa forma SQL&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ismR0yLLzo4/Tc2P2aaBHLI/AAAAAAAAAL0/NZJ_Tyfzc4s/s1600/linqpad3.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" j8="true" src="http://4.bp.blogspot.com/-ismR0yLLzo4/Tc2P2aaBHLI/AAAAAAAAAL0/NZJ_Tyfzc4s/s1600/linqpad3.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;e l'IL&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-xH3hxo9XvaI/Tc2QVtxu-SI/AAAAAAAAAL4/pA_JXlyBIVA/s1600/linqpad4.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" j8="true" src="http://2.bp.blogspot.com/-xH3hxo9XvaI/Tc2QVtxu-SI/AAAAAAAAAL4/pA_JXlyBIVA/s1600/linqpad4.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In questo caso vediamo un esempio di LINQ to Objects:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-1fKxScCtoHk/Tc2Q23YSRmI/AAAAAAAAAL8/ktM41HdeUsQ/s1600/linqpad5.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" j8="true" src="http://1.bp.blogspot.com/-1fKxScCtoHk/Tc2Q23YSRmI/AAAAAAAAAL8/ktM41HdeUsQ/s1600/linqpad5.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Qui&amp;nbsp;vediamo un esempio utilizzando IronPython. Occorrerà far riferimento preventivamente agli assembly opportuni. Cliccando il tasto F4 si potranno aggiungere gli assembly e i namespace da utilizzare&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-8vkmKmOXucE/Tc2Sc5J310I/AAAAAAAAAME/kjJ53-NM7pc/s1600/linqpad7.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" j8="true" src="http://1.bp.blogspot.com/-8vkmKmOXucE/Tc2Sc5J310I/AAAAAAAAAME/kjJ53-NM7pc/s1600/linqpad7.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-5X14RgfG-E8/Tc2Rs8Lxw4I/AAAAAAAAAMA/EzE0YMOCxy0/s1600/linqpad6.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" j8="true" src="http://1.bp.blogspot.com/-5X14RgfG-E8/Tc2Rs8Lxw4I/AAAAAAAAAMA/EzE0YMOCxy0/s1600/linqpad6.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Vediamo un esempio utilizzando la nuova classe ExpandoObject del framework 4.0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-7crLBurb95s/Tc2S7S3pppI/AAAAAAAAAMI/o3yKGR054Nk/s1600/linqpad8.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" j8="true" src="http://3.bp.blogspot.com/-7crLBurb95s/Tc2S7S3pppI/AAAAAAAAAMI/o3yKGR054Nk/s1600/linqpad8.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Ma LINQPad mette anche a disposizione alcune sue funzioni per, ad esempio, visualizzare immagini,&amp;nbsp;visualizzare un testo&amp;nbsp;html&amp;nbsp;ecc. &lt;br /&gt;In questo caso vediamo una chiamata alle api chart di google:&lt;br /&gt;&lt;span style="color: #dc1414; font-family: Consolas; font-size: x-small;"&gt;&lt;span style="color: #dc1414; font-family: Consolas; font-size: x-small;"&gt;&lt;span style="color: #dc1414; font-family: Consolas; font-size: x-small;"&gt;http://chart.apis.google.com/chart?cht=p3&amp;amp;chd=s:Uf9a&amp;amp;chs=350x140&amp;amp;chl=January|February|March|April"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Y1H7bN0BRcc/Tc2UToJJnvI/AAAAAAAAAMM/5hbridYGmZI/s1600/linqpad9.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" j8="true" src="http://1.bp.blogspot.com/-Y1H7bN0BRcc/Tc2UToJJnvI/AAAAAAAAAMM/5hbridYGmZI/s1600/linqpad9.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Vediamo ora una interrogazione OData / WCF Data Services utilizzando stackoverflow. Nel caso di stackoverflow la chiamata è del tipo è&amp;nbsp;&amp;nbsp;&lt;a href="http://data.stackexchange.com/%3Ccommunity%3E/atom"&gt;http://data.stackexchange.com/%3Ccommunity%3E/atom&lt;/a&gt;&lt;br /&gt;Clicchiamo su add connection&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-3Txe2EEMw4I/Tc2VKSQp8lI/AAAAAAAAAMQ/KxEH0XYmth4/s1600/linqpad10.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" j8="true" src="http://1.bp.blogspot.com/-3Txe2EEMw4I/Tc2VKSQp8lI/AAAAAAAAAMQ/KxEH0XYmth4/s1600/linqpad10.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-aw2cNmRKLIU/Tc2Vfj4wAGI/AAAAAAAAAMU/L7sQE5zOF60/s1600/linqpad11.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" j8="true" src="http://4.bp.blogspot.com/-aw2cNmRKLIU/Tc2Vfj4wAGI/AAAAAAAAAMU/L7sQE5zOF60/s1600/linqpad11.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-OUG50yOEMsY/Tc6yr49iGxI/AAAAAAAAAMg/QpvHIeKewzQ/s1600/Linqpad12.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-OUG50yOEMsY/Tc6yr49iGxI/AAAAAAAAAMg/QpvHIeKewzQ/s1600/Linqpad12.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Infine vediamo l'utilizzo di una libreria ESRI. nel caso specifico la ESRI.ArcGIS.SOESupport.dll:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-_QV12lGki9g/Tc2WhPI98sI/AAAAAAAAAMY/Hg8hxKZxOZA/s1600/linqpad12.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" j8="true" src="http://2.bp.blogspot.com/-_QV12lGki9g/Tc2WhPI98sI/AAAAAAAAAMY/Hg8hxKZxOZA/s1600/linqpad12.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-4wqe869LjwM/Tc2W7rQWXTI/AAAAAAAAAMc/ANGP3_q_RJY/s1600/linqpad13.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" j8="true" src="http://3.bp.blogspot.com/-4wqe869LjwM/Tc2W7rQWXTI/AAAAAAAAAMc/ANGP3_q_RJY/s1600/linqpad13.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://geekswithblogs.net/WinAZ/archive/2011/02/24/linq-to-twitter-queries-with-linqpad.aspx"&gt;Qui&lt;/a&gt; potete vedere come interrogare twitter&lt;br /&gt;&lt;br /&gt;Con la versione beta corrente di LinqPad è possibile aggiungere i propri visualizzatori personalizzati.&lt;br /&gt;Per maggiori dettagli vedete &lt;a href="http://www.linqpad.net/CustomVisualizers.aspx"&gt;qui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Qui vediamo un semplice esempio che ho realizzato:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System.Globalization;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System.Text;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;LINQPad;&lt;br /&gt; &lt;br /&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt;&amp;nbsp;StudioAT.LinqPad&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;x;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;y;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;Point()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;Point(&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;x,&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;y)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.x&amp;nbsp;=&amp;nbsp;x;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.y&amp;nbsp;=&amp;nbsp;y;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;X&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.x;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;Y&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.y;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Extensions&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;Map&amp;nbsp;Mode&amp;nbsp;of&amp;nbsp;Map&amp;nbsp;Control&amp;nbsp;(Microsoft)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;enum&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;MapMode&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;map&amp;nbsp;mode&amp;nbsp;road&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Road,&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;map&amp;nbsp;mode&amp;nbsp;aerial&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Aerial,&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;map&amp;nbsp;mode&amp;nbsp;aerial&amp;nbsp;with&amp;nbsp;labels&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AerialWithLabels,&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;Bird's&amp;nbsp;eye&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Birdseye,&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;Bird's&amp;nbsp;eye&amp;nbsp;with&amp;nbsp;labels&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BirdseyeWithLabels&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;DisplayBirdsEye(&lt;span style="color: blue;"&gt;this&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt;&amp;nbsp;point)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;url&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515;"&gt;"http://dev.virtualearth.net/embeddedMap/v1/ajax/{0}?"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Enum&lt;/span&gt;.GetName(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;MapMode&lt;/span&gt;),&amp;nbsp;&lt;span style="color: #2b91af;"&gt;MapMode&lt;/span&gt;.BirdseyeWithLabels));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;pointXY&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515;"&gt;"{1}_{0}"&lt;/span&gt;,&amp;nbsp;point.X.ToString(&lt;span style="color: #2b91af;"&gt;Helper&lt;/span&gt;.CultureInfoUS),&amp;nbsp;point.Y.ToString(&lt;span style="color: #2b91af;"&gt;Helper&lt;/span&gt;.CultureInfoUS));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;currentCulture&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;CultureInfo&lt;/span&gt;.CurrentUICulture.Name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Helper&lt;/span&gt;.GetCultureMapControl(&lt;span style="color: blue;"&gt;ref&lt;/span&gt;&amp;nbsp;currentCulture);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;UriBuilder&lt;/span&gt;&amp;nbsp;uriBuilder&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;UriBuilder&lt;/span&gt;(&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Uri&lt;/span&gt;(url));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;StringBuilder&lt;/span&gt;&amp;nbsp;sb&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;StringBuilder&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.AppendFormat(&lt;span style="color: #a31515;"&gt;"zoomLevel={0}"&lt;/span&gt;,&amp;nbsp;10);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.Append(&lt;span style="color: #a31515;"&gt;'&amp;amp;'&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.AppendFormat(&lt;span style="color: #a31515;"&gt;"center={0}"&lt;/span&gt;,&amp;nbsp;pointXY);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.Append(&lt;span style="color: #a31515;"&gt;'&amp;amp;'&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.AppendFormat(&lt;span style="color: #a31515;"&gt;"pushpins={0}"&lt;/span&gt;,&amp;nbsp;pointXY);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.Append(&lt;span style="color: #a31515;"&gt;'&amp;amp;'&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////The&amp;nbsp;heading&amp;nbsp;is&amp;nbsp;represented&amp;nbsp;in&amp;nbsp;geometric&amp;nbsp;degrees&amp;nbsp;with&amp;nbsp;0&amp;nbsp;or&amp;nbsp;360&amp;nbsp;=&amp;nbsp;North,&amp;nbsp;90&amp;nbsp;=&amp;nbsp;East,&amp;nbsp;180&amp;nbsp;=&amp;nbsp;South,&amp;nbsp;and&amp;nbsp;270&amp;nbsp;=&amp;nbsp;West.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////sb.AppendFormat("heading={0}",&amp;nbsp;0);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////sb.Append('&amp;amp;');&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.AppendFormat(&lt;span style="color: #a31515;"&gt;"culture={0}"&lt;/span&gt;,&amp;nbsp;currentCulture);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uriBuilder.Query&amp;nbsp;=&amp;nbsp;sb.ToString();&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Windows.Forms.&lt;span style="color: #2b91af;"&gt;WebBrowser&lt;/span&gt;&amp;nbsp;wb&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;System.Windows.Forms.&lt;span style="color: #2b91af;"&gt;WebBrowser&lt;/span&gt;()&amp;nbsp;{&amp;nbsp;ScriptErrorsSuppressed&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;true&lt;/span&gt;&amp;nbsp;};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wb.Navigate(uriBuilder.Uri.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;PanelManager&lt;/span&gt;.DisplayControl(wb,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"Bird's&amp;nbsp;eye"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;DisplayStreetView(&lt;span style="color: blue;"&gt;this&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt;&amp;nbsp;point)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Windows.Forms.&lt;span style="color: #2b91af;"&gt;WebBrowser&lt;/span&gt;&amp;nbsp;wb&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;System.Windows.Forms.&lt;span style="color: #2b91af;"&gt;WebBrowser&lt;/span&gt;()&amp;nbsp;{&amp;nbsp;ScriptErrorsSuppressed&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;true&lt;/span&gt;&amp;nbsp;};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;UriBuilder&lt;/span&gt;&amp;nbsp;uriBuilder&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;UriBuilder&lt;/span&gt;(&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Uri&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"http://samples.sistemigis.it/StreetViewArcMap/panoAvailable.html"&lt;/span&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;StringBuilder&lt;/span&gt;&amp;nbsp;sb&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;StringBuilder&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.AppendFormat(&lt;span style="color: #a31515;"&gt;"lat={0}"&lt;/span&gt;,&amp;nbsp;point.Y.ToString(&lt;span style="color: #2b91af;"&gt;Helper&lt;/span&gt;.CultureInfoUS));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.Append(&lt;span style="color: #a31515;"&gt;'&amp;amp;'&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.AppendFormat(&lt;span style="color: #a31515;"&gt;"long={0}"&lt;/span&gt;,&amp;nbsp;point.X.ToString(&lt;span style="color: #2b91af;"&gt;Helper&lt;/span&gt;.CultureInfoUS));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.Append(&lt;span style="color: #a31515;"&gt;'&amp;amp;'&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.AppendFormat(&lt;span style="color: #a31515;"&gt;"width={0}"&lt;/span&gt;,&amp;nbsp;600);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.Append(&lt;span style="color: #a31515;"&gt;'&amp;amp;'&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.AppendFormat(&lt;span style="color: #a31515;"&gt;"height={0}"&lt;/span&gt;,&amp;nbsp;400);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uriBuilder.Query&amp;nbsp;=&amp;nbsp;sb.ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wb.Navigate(uriBuilder.Uri.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;PanelManager&lt;/span&gt;.DisplayControl(wb,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"Street&amp;nbsp;View"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;class&amp;nbsp;of&amp;nbsp;helper&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Helper&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;culture&amp;nbsp;for&amp;nbsp;lat-long&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;readonly&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;CultureInfo&lt;/span&gt;&amp;nbsp;CultureInfoUS&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;CultureInfo&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"en-US"&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;culture&amp;nbsp;supported&amp;nbsp;from&amp;nbsp;Map&amp;nbsp;Control&amp;nbsp;(Microsoft)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;readonly&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;[]&amp;nbsp;culturesMapControl&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: #a31515;"&gt;"nl-BE"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"en-CA"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"en-IN"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"en-GB"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"en-US"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"fr-CA"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"fr-FR"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"de-DE"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"it-IT"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"ja-JP"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"es-MX"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"es-ES"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"es-US"&lt;/span&gt;&amp;nbsp;};&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;set&amp;nbsp;culture&amp;nbsp;for&amp;nbsp;map&amp;nbsp;control&amp;nbsp;(microsoft)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;if&amp;nbsp;current&amp;nbsp;culture&amp;nbsp;isn't&amp;nbsp;supported&amp;nbsp;it's&amp;nbsp;changed&amp;nbsp;with&amp;nbsp;default&amp;nbsp;culture&amp;nbsp;of&amp;nbsp;map&amp;nbsp;control&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;param&amp;nbsp;name=&lt;/span&gt;&lt;span style="color: grey;"&gt;"currentCulture"&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;current&amp;nbsp;culture&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;GetCultureMapControl(&lt;span style="color: blue;"&gt;ref&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;currentCulture)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;pos&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Array&lt;/span&gt;.BinarySearch&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(culturesMapControl,&amp;nbsp;currentCulture);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(pos&amp;nbsp;&amp;lt;&amp;nbsp;0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentCulture&amp;nbsp;=&amp;nbsp;CultureInfoUS.Name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Una volta eseguiti i due extension method, è possibile utilizzare i visualizer personalizzati, nel nostro caso Bird's eye e Street View.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-wPyQpi-RJ_0/TwIUronTcnI/AAAAAAAAAUo/Zf3lUhLGNOo/s1600/birdsEyePlugInLinqPad.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rea="true" src="http://3.bp.blogspot.com/-wPyQpi-RJ_0/TwIUronTcnI/AAAAAAAAAUo/Zf3lUhLGNOo/s1600/birdsEyePlugInLinqPad.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-A_ED4n06Sdc/TwIVRRGmcuI/AAAAAAAAAVU/0sLpuBERTcI/s1600/StreetViewPlugInLinqPad.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rea="true" src="http://1.bp.blogspot.com/-A_ED4n06Sdc/TwIVRRGmcuI/AAAAAAAAAVU/0sLpuBERTcI/s1600/StreetViewPlugInLinqPad.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Occorre creare un progetto di tipo Class Library ed aggiungere nei riferimenti l'exe di LinqPad evitando di fare un'inutile copia dell'exe durante la compilazione (Copy Local = false)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-x9Cx90BrnI4/TwIVf-slzwI/AAAAAAAAAVg/VygTJJkXxJs/s1600/exeReferencesPlugInLinqPad.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rea="true" src="http://3.bp.blogspot.com/-x9Cx90BrnI4/TwIVf-slzwI/AAAAAAAAAVg/VygTJJkXxJs/s1600/exeReferencesPlugInLinqPad.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Per avere pronto il plugin all'uso è possibile impostare come percorso di compilazione la cartella dei plugin di LinqPad. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-54YuH_VwpCs/TwIWLV7QDpI/AAAAAAAAAVs/Em4Q_CLP9Qo/s1600/PathDllPlugInLinqPad.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rea="true" src="http://4.bp.blogspot.com/-54YuH_VwpCs/TwIWLV7QDpI/AAAAAAAAAVs/Em4Q_CLP9Qo/s1600/PathDllPlugInLinqPad.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Per creare e/o impostare questa cartella in LinqPad selezionare la voce &lt;em&gt;Preferences &lt;/em&gt;dal menu &lt;em&gt;Edit&lt;/em&gt;&amp;nbsp; (tab &lt;em&gt;Folders&lt;/em&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ISoAMOyh3k8/TwIWzXOuxTI/AAAAAAAAAV4/W8CcLdebZIg/s1600/pathPreferencesPlugInLinqPad.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rea="true" src="http://3.bp.blogspot.com/-ISoAMOyh3k8/TwIWzXOuxTI/AAAAAAAAAV4/W8CcLdebZIg/s1600/pathPreferencesPlugInLinqPad.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Tutte le dll e gli exe in questa cartella vengono automaticamente riferiti in LinqPad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8323071861123024882-7673693818431448687?l=nicogis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicogis.blogspot.com/feeds/7673693818431448687/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8323071861123024882&amp;postID=7673693818431448687' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/7673693818431448687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/7673693818431448687'/><link rel='alternate' type='text/html' href='http://nicogis.blogspot.com/2011/04/linqpad-linq-ma-non-solo.html' title='LINQPad: Linq ma non solo ...'/><author><name>Ing. Domenico Ciavarella</name><uri>http://www.blogger.com/profile/11116200904149667988</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-hc7A5NAVWEU/TbxOnHjqZPI/AAAAAAAAALM/8Mvi5N0jizs/s220/001.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-emkqax1w-UA/Tc2OnmetRaI/AAAAAAAAALs/fvGUAgML33M/s72-c/linqpad1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8323071861123024882.post-8306198404309993741</id><published>2011-03-01T17:57:01.406+01:00</published><updated>2011-05-24T15:38:57.610+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='msd'/><category scheme='http://www.blogger.com/atom/ns#' term='SOE'/><title type='text'>SOE (Server Object Extension) Rest</title><content type='html'>SOE consente di estendere le funzionalità base di ArcGIS Server. Le funzionalità sono sviluppate prevalentemente utilizzando gli ArcObjects, che sono i mattoncini con i quali è costruito ArcGIS e che consentono la massima flessibilità nello sviluppo di funzionalità.&lt;br /&gt;Poichè lo sviluppo di una SOE richiede conoscenze di sviluppo&amp;nbsp;relative a&amp;nbsp;diversi ambienti, è importante valutare bene se è necessario svilupparla o trovare alternative ai propri scopi. Normalmente la si sviluppa quando non sono presenti funzionalità out-of-box esposte da ArcGIS Server o dal geoprocessing (funzionalità ad esempio di segmentazione dinamica o tracing su geometry network).&lt;br /&gt;La SOE estende un tipo di servizio. Per ora SOE esposta via REST è solo disponibile con servizi di tipo MapServer.&lt;br /&gt;Considerando poi che la 10.1 permetterà solo la pubblicazione di msd (Servizi di mappa ottimizzati) è importante sviluppare SOE Rest che supportino gli msd. Questo può creare qualche problema nell'utilizzo diretto dei fine-grained arcobjects dalla libreria Carto, ma è comunque possibile utilizzare nuove interfacce che abilitano il MapServer ad utilizzare gli object.&lt;br /&gt;Per lo sviluppo occorre conoscere gli ArcObjects, .NET o Java e tecnologie di comunicazione web service come REST o SOAP. Inoltre, se occorre gestire delle proprietà della SOE, è possibile sviluppare in ArcCatalog nella pagina delle capabilites del servizio una windows form. &lt;br /&gt;Per completezza è possibile esporre la SOE anche via SOAP.&lt;br /&gt;Come abbiamo già detto, occorre valutare bene se sviluppare una SOE o se ad esempio creare un modello con il Model Builder e concatenare i singoli tool che ci interessano per eseguire i nostri task. Questi tool potranno essere personalizzati con Python (ora nella 10 potenziato con arcpy). Si potrà poi esporre questi geoprocessi come web service per essere utilizzati dalle nostre applicazioni. Inoltre è possibile creare strumenti di geoprocessing con .NET e incorporare arcobjects in tool utilizzabile nei tool o nei modelli. E' chiaro che utilizzando tool out-of-box e costruendo modelli evitiamo la scrittura di codice. &lt;br /&gt;L'aspetto negativo di questa soluzione è che richiede più memoria e spesso è più lenta della SOE. E' chiaro che una soluzione di questo tipo si adatta bene se il servizio è chiamato solo poche volte al giorno. Se il servizio è chiamato molte volte e soprattutto da utenti concorrenti, optare per la SOE.&lt;br /&gt;Infine, prima di iniziare lo sviluppo di una SOE, valutare anche se le funzionalità del geometry service con le funzionalità di interrogazione esposte da ArcGIS Server non coprono già le nostre esigenze.&lt;br /&gt;&lt;br /&gt;Una SOE è un oggetto COM sviluppato in .NET o Java che implementa &lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#//003z000000qm000000"&gt;IServerObjectExtension&lt;/a&gt; più altre interfacce necessarie all'implementazione.&lt;br /&gt;&lt;br /&gt;Questa interfaccia è utilizzata dal server object (servizio) per gestire il ciclo di vita della SOE. L'&lt;b&gt;Init&lt;/b&gt; è chiamato una sola volta quando si crea l'istanza, mentre lo &lt;b&gt;ShutDown&lt;/b&gt; informa la SOE che il context è in shut down cosicchè la SOE rilascia il suo riferimento sul server object helper.&lt;br /&gt;&lt;br /&gt;La SOE può opzionalmente implementare l'interfaccia &lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#//00420000015w000000"&gt;IObjectConstruct&lt;/a&gt;, se occorre recuperare proprietà di configurazione della SOE o occorre eseguire logiche di inizializzazione. Questa interfaccia ha un solo metodo che è chiamato una sola volta dopo l'Init.&lt;br /&gt;&lt;br /&gt;Attenzione a non mettere logiche di inizializzazione nel costruttore della SOE o nell'Init, ma utilizzare IObjectConstruct.Construct(), che è chiamato dopo il ciclo di vita della SOE e così assicura che la SOE è creata e puoi così generare log sin dalla tua logica di inizializzazione.&lt;br /&gt;&lt;br /&gt;IObjectActivate and ILogSupport sono due interfacce opzionali da non utilizzare poichè sono utilizzabili con SOE che usano connessioni ArcGIS Server Local. Poichè con la 10.1 non ci sarà supporto su DCOM è meglio evitare di utilizzarle e comunque non sono utilizzate con SOE Web Services.&lt;br /&gt;&lt;br /&gt;Per il logging utilizzeremo l'oggetto ESRI.ArcGIS.SOESupport.ServerLogger.&lt;br /&gt;&lt;br /&gt;Per le SOE Rest implementeremo l'interfaccia IRESTRequestHandler: il client invia richieste su http al web service che restituisce una risposta. L'interfaccia IRESTRequestHandler facilita questa comunicazione.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;I passi da seguire per sviluppare una SOE sono:&lt;/b&gt;&lt;br /&gt;1) Sviluppare la SOE. E' presente un template in Visual Studio che crea un primo scheletro con le interfacce da implementare.&lt;br /&gt;2) Registrare la SOE su ogni macchina SOC&lt;br /&gt;3) Registrare la SOE in ArcGIS Server SOM&lt;br /&gt;4) Facoltativo: sviluppare una pagina di proprietà della SOE per ArcCatalog&lt;br /&gt;5) Abilitare la SOE su un servizio&lt;br /&gt;6) Utilizzare il servizio con abilitata la SOE da un client (per esempio da Silverlight, Flex, Javascript).&lt;br /&gt;&lt;br /&gt;Per lavorare con i Web services REST SOE, una volta indicato l'url ed appeso alcuni parametri di input (coordinate, nomi di layer ecc.), il server elabora e restituisce la risposta, come ad esempio, dati o stream di byte (immagini), al browser. Normalmente questo scambio avviene attraverso JSON.&lt;br /&gt;&lt;br /&gt;Esempio:&lt;br /&gt;&lt;br /&gt;http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Earthquakes/EarthquakesFromLastSevenDays/MapServer/0/query?where=magnitude&amp;gt;6&amp;amp;f=pjson&lt;br /&gt;&lt;br /&gt;Questo è l'url inviato al server. I parametri che passiamo sono dopo il ? e cioè where=magnitude&amp;gt;6&amp;amp;f=pjson&lt;br /&gt;&lt;br /&gt;La risposta restituita dal server in JSON è&lt;br /&gt;{&lt;br /&gt;"displayFieldName" : "eqid",&lt;br /&gt;"fieldAliases" : {&lt;br /&gt;"eqid" : "Earthquake ID"&lt;br /&gt;},&lt;br /&gt;"geometryType" : "esriGeometryPoint",&lt;br /&gt;"spatialReference" : {&lt;br /&gt;"wkid" : 4326&lt;br /&gt;},&lt;br /&gt;"fields" : [&lt;br /&gt;{&lt;br /&gt;"name" : "eqid",&lt;br /&gt;"type" : "esriFieldTypeString",&lt;br /&gt;"alias" : "Earthquake ID",&lt;br /&gt;"length" : 50&lt;br /&gt;}&lt;br /&gt;],&lt;br /&gt;"features" : [&lt;br /&gt;{&lt;br /&gt;"attributes" : {&lt;br /&gt;"eqid" : "c0000f0y"&lt;br /&gt;},&lt;br /&gt;"geometry" : {&lt;br /&gt;"x" : 148.95690000000002,&lt;br /&gt;"y" : -6.0207999999999515&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;]&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Il client potrà poi leggere e "parsare" la risposta in JSON e fare qualcosa nell'applicazione: ad esempio visualizzare le geometrie nella propria mappa.&lt;br /&gt;&lt;br /&gt;Il precedente esempio è una chiamata rest ad un servizio ArcGIS Server. In questo caso non è stata chiamata una SOE Rest.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Il seguente link richiede la quota ad una certa latitudine e longitudine. E' una SOE chiamata ElevationSOE&lt;br /&gt;http://sampleserver4.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/MapServer/exts/ElevationsSOE/ElevationLayers/1/GetElevationAtLonLat?lon=-123&amp;amp;lat=47&amp;amp;f=pjson&lt;br /&gt;&lt;br /&gt;Vediamo come è composto l'url:&lt;br /&gt;- &lt;strong&gt;http://sampleserver4.arcgisonline.com/ArcGIS/rest/services&lt;/strong&gt; : è l'URL dell'ArcGIS Server root per i servizi rest&lt;br /&gt;- &lt;strong&gt;Elevation&lt;/strong&gt;: nome della cartella in ArcGIS Server&lt;br /&gt;- &lt;strong&gt;ESRI_Elevation_World&lt;/strong&gt;: nome del servizio&lt;br /&gt;- &lt;strong&gt;MapServer&lt;/strong&gt;: tipo di servizio&lt;br /&gt;- &lt;strong&gt;exts&lt;/strong&gt;: url della root per tutte le SOE esposte da questo servizio&lt;br /&gt;- &lt;strong&gt;ElevationsSOE&lt;/strong&gt;: nome della SOE&lt;br /&gt;- &lt;strong&gt;ElevationLayers&lt;/strong&gt;: risorsa esposta dalla SOE rappresentante una lista di layer abilitati per restituire quote&lt;br /&gt;- &lt;strong&gt;1&lt;/strong&gt;: indice del layer da utilizzare nella richiesta della risorsa ElevationLayers&lt;br /&gt;- &lt;strong&gt;GetElevationAtLonLat&lt;/strong&gt;: operazione sulla SOE che prende la quota data una lat/lon&lt;br /&gt;-&lt;strong&gt; lon=-123&lt;/strong&gt;: parametro logitudine per GetElevationAtLonLat &lt;br /&gt;- &lt;strong&gt;lat=47&lt;/strong&gt;: parametro latitudine per GetElevationAtLonLat &lt;br /&gt;- &lt;strong&gt;f=pjson&lt;/strong&gt;: formato per la risposta dell'operazione. In questo caso è stato indicato il pjson ovverosia il json formattato per essere facilmente leggibile.&lt;br /&gt;&lt;br /&gt;Il server restituisce un oggetto Json (chiamato elevation).&lt;br /&gt;{&lt;br /&gt;"elevation" : 83.003478588350134&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Il server in questo caso ha eseguito ArcObjects per restituire questo risultato, ma l'applicazione client non necessita di avere conoscenze ArcObjects. Il client deve solo conoscere l'url e gestirsi la risposta.&lt;br /&gt;&lt;br /&gt;Prima di sviluppare una SOE Rest occorre introdurre la definizione di risorsa e di operazione.&lt;br /&gt;Una volta stabilito quali sono le informazioni che vogliamo inviare e ricevere dal nostro servizio occorre pensare alla SOE Rest come risorse e operazioni.&lt;br /&gt;Le risorse sono delle informazioni che richiediamo al server. Esempio: una lista di layer della mappa o un insieme di livelli di scala disponibili nella cache della mappa. Può essere vista come una proprietà di sola lettura.&lt;br /&gt;Le operazioni sono richieste al server su una determinata risorsa. Dopo aver effettuato la richiesta possiamo farci restituire informazioni testuali, immagini od altro. Le operazioni possono essere viste come dei metodi.&lt;br /&gt;&lt;br /&gt;E' importante progettare il diagramma delle risorse e delle operazioni (con input ed output) per poter creare lo schema poichè quest'ultimo deve essere creato da programmazioni e, se dovessimo creare&amp;nbsp; risorse multiple con operazioni, potrebbe diventare ardua la gestione da codice senza un diagramma definito. Inoltre, poichè i dati in input ed output andranno serializzati o deserializzati (si passerà da Json ad ArcObjects e viceversa), conoscere nel dettaglio i parametri aiuta lo sviluppo di queste operazioni. La ESRI ha introdotto oggetti e metodi (nella libreria ESRI.ArcGIS.SOESupport) che aiutano i passaggi di serializzazione e deserializzazione. &lt;br /&gt;&lt;br /&gt;Una volta che abbiamo installato SDK ArcGIS.NET, abbiamo a disposizione in Visual Studio 2008 e 2010 dei templates che ci aiutano a creare una SOE Rest. Il template è disponibile sono in C# con framework 3.5.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-dayGw0I5eYs/TXfQq6adXpI/AAAAAAAAAKs/gM7iEHzO0rw/s1600/soeTemplate.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="441" src="http://2.bp.blogspot.com/-dayGw0I5eYs/TXfQq6adXpI/AAAAAAAAAKs/gM7iEHzO0rw/s640/soeTemplate.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Una volta selezionato il template, ci verrà generata una classe che rappresenta la nostra SOE Rest.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-choG4kbKhfM/TXfUkHP4XoI/AAAAAAAAAK0/izQavTGE-_Y/s1600/soeclass.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="243" src="http://2.bp.blogspot.com/-choG4kbKhfM/TXfUkHP4XoI/AAAAAAAAAK0/izQavTGE-_Y/s400/soeclass.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Come abbiamo accennato precedentemente, una SOE è una classe COM che risiede sul nostro server. Il template ha già impostato per noi la GUID e la visibilità a COM.&lt;br /&gt;Inoltre la classe implementa una serie di interfacce alcune delle quali sono nuove:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ServicedComponent&lt;/b&gt;: è richiesta come classe base dalla SOE che usa COM.&lt;br /&gt;&lt;b&gt;IServerObjectExtension&lt;/b&gt;: contiene i metodi Init() e Shutdown() che vengono eseguiti quando si avvia e si ferma la nostra SOE. Normalmente non vengono utilizzati a meno che occorra 'ripulire' qualcosa sullo shutdown. Utilizzare il metodo IObjectConstruct.Construct() per inizializzare qualcosa una volta che la SOE è abilitata -&amp;nbsp;non il costruttore della classe o l'Init.&lt;br /&gt;&lt;b&gt;IObjectConstruct&lt;/b&gt;: contiene un metodo (Construct()) che viene eseguito una volta che la SOE è abilitata. Qui è il posto corretto dove mettere logiche business di inizializzazione che non necessitano di essere eseguite ad ogni richiesta. Ad esempio, potresti creare geodatabase temporanei che precalcolano dati che poi verranno utilizzati e dipendono dal servizio sottostante, oppure impostare variabili che verranno poi utilizzate perchè non cambiano più durante il ciclo di vita ecc.&lt;br /&gt;&lt;b&gt;IRESTRequestHandler&lt;/b&gt;: abilita richieste e risposte REST per il servizio. Questi metodi creano lo schema e manipolano le richieste. Normalmente possiamo lasciare il codice generato così com'è.&lt;br /&gt;&lt;br /&gt;Nel costruttore possiamo notare la classe SoeRestImpl che implementa l'interfaccia IRESTRequestHandler.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;reqHandler&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;SoeRestImpl&lt;/span&gt;(soe_name,&amp;nbsp;CreateRestSchema())&amp;nbsp;&lt;span style="color: blue;"&gt;as&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IRESTRequestHandler&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;La SoeRestImpl valida lo schema SOE, convalida il nome delle risorse e delle operazioni&amp;nbsp;delle chiamate HandleRESTRequest, valida le capabilities della SOE, gestisce gli errori e&amp;nbsp;&amp;nbsp;registra le chiamate e le risposte del servizio.&lt;br /&gt;La classe SOE normalmente contiene una sola istanza della classe SoeRestImpl.&lt;br /&gt;Il resto del template contiene delle funzioni per mostrare che cosa la SOE Rest può fare e come ogni richiesta alla SOE può essere gestita. CreateRestSchema() definisce le risorse e le operazioni disponibili nella nostra SOE. Ognuna di queste risorse e operazioni ha associato una funzione che descrive che cosa deve fare la risorsa e l'operazione quando è chiamata. Il template contiene, a scopo dimostrativo, una funzione per la risorsa ( RootResHandler() ) ed una per una operazione ( SampleOperHandler() ).&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;RestResource&lt;/span&gt;&amp;nbsp;CreateRestSchema()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;RestResource&lt;/span&gt;&amp;nbsp;rootRes&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;RestResource&lt;/span&gt;(soe_name,&amp;nbsp;&lt;span style="color: blue;"&gt;false&lt;/span&gt;,&amp;nbsp;RootResHandler);&lt;br /&gt;     &lt;span style="color: #2b91af;"&gt;RestOperation&lt;/span&gt;&amp;nbsp;sampleOper&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;RestOperation&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"sampleOperation"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: #a31515;"&gt;"parm1"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"parm2"&lt;/span&gt;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: #a31515;"&gt;"json"&lt;/span&gt;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SampleOperHandler);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rootRes.operations.Add(sampleOper);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;rootRes;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;In questo caso possiamo vedere come lo schema del template è molto semplice, ovvero abbiamo una risorsa (risorsa di root) e una operazione che viene aggiunta alla risorsa di root ( rootRes.operations.Add(sampleOper)).&lt;br /&gt;Come abbiamo detto precedentemente, poichè lo schema verrà creato via codice è importante definire bene le risorse e le operazioni che si vogliono supportare.&lt;br /&gt;&lt;br /&gt;La funzione CreateRestSchema() è il cuore della nostra SOE Rest.&lt;br /&gt;Qui è dove noi definiamo e creiamo lo schema del servizio dicendo quali risorse e operazioni intediamo supportare.&lt;br /&gt;&lt;br /&gt;Per ogni risorsa che definiamo, utilizziamo RestResource, mentre per ogni operazione che definiamo utilizziamo RestOperation.&lt;br /&gt;Una volta definite tutte le risorse e le operazioni, utilizziamo il metodo Add() sulla risorse per costruire lo schema.&lt;br /&gt;&lt;br /&gt;Nel precedente schema, alla risorsa rootRes è stata aggiunta una operazione (sampleOper).&lt;br /&gt;&lt;br /&gt;Quando creiamo una RestResource o una RestOperation, possiamo, opzionalmente, passare&amp;nbsp;il nome di una capabilities come uno dei parametri del metodo e/o per le operation se si può chiamare esclusivamente via post (&lt;strong&gt;postOnly&lt;/strong&gt;).&lt;br /&gt;&lt;br /&gt;La risorsa può essere una collezione o meno. Il secondo parametro indica se la risorsa è una collezione.&lt;br /&gt;&lt;br /&gt;Esempio di risorsa di tipo collection&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: #2b91af;"&gt;RestResource&lt;/span&gt;&amp;nbsp;customLayerResource&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;RestResource&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"customLayers"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;true&lt;/span&gt;,&amp;nbsp;CustomLayer,&amp;nbsp;c_CapabilityGetInfo);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ora, se una risorsa od una operazione è aggiunta in una risorsa di tipo collezione, quando chiameremo la nostra operazione/risorsa per recuperare il/i valore/i delle risorse di tipo collezione dei livelli superiori utilizzeremo la lista boundVariable contenente tutti valori di ogni risorsa di tipo collezione dei livelli superiori rispetto alla risorsa od operazione che si sta analizzando. Ogni valore è recuperato passando la chiave così composta "NomeRisorsa" + ID&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: green;"&gt;//customLayers/{customLayersID}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//returns&amp;nbsp;json&amp;nbsp;with&amp;nbsp;simplified&amp;nbsp;layerinfo&amp;nbsp;(name,&amp;nbsp;id,&amp;nbsp;extent)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;byte&lt;/span&gt;[]&amp;nbsp;CustomLayer(&lt;span style="color: #2b91af;"&gt;NameValueCollection&lt;/span&gt;&amp;nbsp;boundVariables,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;outputFormat,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;requestProperties,&amp;nbsp;&lt;span style="color: blue;"&gt;out&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;responseProperties)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;responseProperties&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//layerID&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;layerID&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Convert&lt;/span&gt;.ToInt32(boundVariables[&lt;span style="color: #a31515;"&gt;"customLayersID"&lt;/span&gt;]);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: #2b91af;"&gt;RestOperation&lt;/span&gt;&amp;nbsp;sampleOper&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;RestOperation&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"sampleOperation"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: #a31515;"&gt;"parm1"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"parm2"&lt;/span&gt;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: #a31515;"&gt;"json"&lt;/span&gt;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SampleOperHandler,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"GetSampleOper"&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;In questo&amp;nbsp;esempio abbiamo definito una capability per l'operazione sampleOper di nome, ad esempio,&amp;nbsp;GetSampleOper.&lt;br /&gt;Le capabilities sono gruppi di risorse o operazioni che l'amministratore del gis server può abilitare o disabilitare per esporre o meno un certo sottoinsieme di funzionalità.&lt;br /&gt;&lt;br /&gt;Queste capabilities sono chiamate "Operations Allowed" e vengono visualizzate automaticamente in ArcCatalog.&lt;br /&gt;&lt;br /&gt;Nel progetto di registrazione della SOE impostare le proprietà seguenti:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: green;"&gt;//&amp;nbsp;Capabilities&lt;/span&gt;&lt;br /&gt;serverObjectExtensionType.Info.SetProperty(&lt;span style="color: #a31515;"&gt;"DefaultWebCapabilities"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515;"&gt;"{0}"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"GetSampleOper"&lt;/span&gt;));&lt;br /&gt;serverObjectExtensionType.Info.SetProperty(&lt;span style="color: #a31515;"&gt;"AllWebCapabilities"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515;"&gt;"{0}"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"GetSampleOper"&lt;/span&gt;));&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/--PXO64AY1lw/TX3OF1OWzEI/AAAAAAAAAK8/FhpOan_8ZBI/s1600/soecapabilities.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" q6="true" src="https://lh3.googleusercontent.com/--PXO64AY1lw/TX3OF1OWzEI/AAAAAAAAAK8/FhpOan_8ZBI/s640/soecapabilities.JPG" width="624" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Abbiamo precedentemente accennato che ogni risorsa ed ogni operazione che aggiungiamo al nostro schema necessita di una funzione. Essa contiene la logica da eseguire quando si chiama la risorsa o l'operazione.&lt;br /&gt;Queste funzioni sono dove noi scriveremo la maggior parte del nostro codice ArcObjects.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-Nn2mSHGWGmE/TX3f7WTmYiI/AAAAAAAAALA/WH-pzGiEgkU/s1600/soelink.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="352" q6="true" src="https://lh5.googleusercontent.com/-Nn2mSHGWGmE/TX3f7WTmYiI/AAAAAAAAALA/WH-pzGiEgkU/s640/soelink.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Se abilitiamo il nostro servizio a questa extension possiamo notare nella sezione Supported Extensions la nostra SOE Rest extension.&lt;br /&gt;Selezionandola &amp;nbsp;vedremo la risposta del resource di root&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-T3EsvlTfAo4/TX3uMtzFbsI/AAAAAAAAALE/K7huWHjSkGY/s1600/soesample.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="344" q6="true" src="https://lh5.googleusercontent.com/-T3EsvlTfAo4/TX3uMtzFbsI/AAAAAAAAALE/K7huWHjSkGY/s640/soesample.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Cliccando su rest vedremo la rappresentazione JSON della risorsa&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;{&lt;br /&gt;  "hello" : "world"&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Nell'esempio del template la risorsa ha una funzione chiamata RootResHandler(). L'esempio creato automaticamente dal template restituisce un semplice JSON hello : world.&lt;br /&gt;La&amp;nbsp;definizione della funzione che gestisce la risorsa è definita da un delegato .NET nella libreria ESRI SOESupport.&lt;br /&gt;Questo significa che tutte le risorse hanno una firma uguale&amp;nbsp;alla seguente:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;delegate&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;byte&lt;/span&gt;[]&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ResourceHandler&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;NameValueCollection&lt;/span&gt;&amp;nbsp;boundVariables,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;outputFormat,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;requestProperties,&amp;nbsp;&lt;span style="color: blue;"&gt;out&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;responseProperties);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Il REST SOE template contiene anche&amp;nbsp;la funzione per una operazione (chiamata SampleOperHandler()). In questo semplice esempio la funzione deserializza due parametri stringa (parm1 e parm2) e restituisce gli stessi come output in formato JSON.&amp;nbsp;Puoi copiare e modificare questa funzione per&amp;nbsp;ospitare le&amp;nbsp; operazioni del tuo schema.&lt;br /&gt;&lt;br /&gt;Come per la risorsa, la firma della funzione per gestire un'operazione è definita da un delegato. Essa è simile a quella della risorsa eccetto il fatto di contenere un oggetto Json come input (operationInput). Questo oggetto Json&amp;nbsp;ha dei parametri richiesti dall'operazione; per esempio, quando chiamiamo un'operazione&amp;nbsp;&amp;nbsp;di buffer, l'oggetto Json potrebbe contenere un punto e la distanza di buffer.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;delegate&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;byte&lt;/span&gt;[]&amp;nbsp;&lt;span style="color: #2b91af;"&gt;OperationHandler&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;NameValueCollection&lt;/span&gt;&amp;nbsp;boundVariables,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;JsonObject&lt;/span&gt;&amp;nbsp;operationInput,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;outputFormat,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;requestProperties,&amp;nbsp;&lt;span style="color: blue;"&gt;out&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;responseProperties);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Gli elementi principali sui quali occorre concentrarsi in una funzione che gestisce una operazione&amp;nbsp;sono: la deserializzazione dell' input JSON, lavorare con gli ArcObiects o con le proprie librerie e serializzare l'output in JSON. Deserializzare e serializzare il JSON può essere la parte più delicata.&lt;br /&gt;&lt;br /&gt;Come possiamo notare, nelle firme abbiamo la responseProperties. Questa potrebbe essere utilizzata quando vogliamo restituire qualcosa che non può essere rappresentato da JSON, come ad esempio una immagine. In questo caso dobbiamo impostare il Content-type header dell' HTTP nelle proprietà della risposta.&lt;br /&gt;&lt;br /&gt;Innanzitutto, quando definiamo la nostra risorsa o operazione, impostiamo i formati supportati. In questo esempio definiamo un'operazione che restituisce un PNG. Nella RestOperation è il terzo parametro che riceve un array di stringhe con i formati supportati.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: #2b91af;"&gt;RestOperation&lt;/span&gt;&amp;nbsp;pngOper&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;RestOperation&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"generatePng"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;[]{&lt;span style="color: #a31515;"&gt;"png"&lt;/span&gt;}&amp;nbsp;,&amp;nbsp;PngHandler);&lt;br /&gt;soeResource.operations.Add(pngOper);&lt;/pre&gt;&lt;br /&gt;Nella funzione che gestisce l'operazione impostiamo come ultimo parametro (responseProperties) un JSON rappresentante il Content-Type header che desideriamo. Nel caso specifico image/png&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;byte&lt;/span&gt;[]&amp;nbsp;PngHandler(System.Collections.Specialized.&lt;span style="color: #2b91af;"&gt;NameValueCollection&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;boundVariables,&amp;nbsp;ESRI.ArcGIS.SOESupport.&lt;span style="color: #2b91af;"&gt;JsonObject&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;operationInput,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;outputFormat,&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;requestProperties,&amp;nbsp;&lt;span style="color: blue;"&gt;out&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;responseProperties)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;responseProperties&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;"{\"Content-Type\"&amp;nbsp;:&amp;nbsp;\"image/png\"}"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;Add&amp;nbsp;code&amp;nbsp;to&amp;nbsp;generate&amp;nbsp;and&amp;nbsp;return&amp;nbsp;a&amp;nbsp;PNG.&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;altrimenti impostiamo a null se non dobbiamo impostare il Content-Type header.&lt;br /&gt;&lt;br /&gt;Il JSON è un formato altamente strutturato per trasferire dati tra applicazioni e per i web services. &lt;br /&gt;Gli ArcObjects però non capiscono il JSON, pertanto le nostre funzioni che gestiscono le risorse e le operazioni devono&amp;nbsp;deserializzare&amp;nbsp;l'input JSON; &amp;nbsp;ovverosia, estrarre i valori che occorrono per la logica di business. Una volta eseguita la business logic, il codice avrà la necessità di creare un JSON con i risultati così da serializzare la risposta.&lt;br /&gt;&lt;br /&gt;La libreria SOESupport è stata creata da ESRI per essere di supporto a queste operaioni, serializzare e deserializzare JSON. Quando un client fa una richiesta, JSON è portato nella funzione&amp;nbsp;che gestisce la risorsa o l'operazione come istanza della classe SOESupport.JsonObject; inoltre, possiamo inviare i nostri risultati dalla funzione come istanza di JsonObject.&lt;br /&gt;&lt;br /&gt;Ma entriamo nel dettaglio: vedendo il codice generato nel template possiamo notare il pattern utilizzato nella funzione di gestione di una operazione.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;byte&lt;/span&gt;[]&amp;nbsp;SampleOperHandler(NameValueCollection&amp;nbsp;boundVariables,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JsonObject&amp;nbsp;operationInput,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;outputFormat,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;requestProperties,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;out&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;responseProperties)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;responseProperties&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;parm1Value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&amp;nbsp;found&amp;nbsp;=&amp;nbsp;operationInput.TryGetString(&lt;span style="color: #a31515;"&gt;"parm1"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;out&lt;/span&gt;&amp;nbsp;parm1Value);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(!found&amp;nbsp;||&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(parm1Value))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;ArgumentNullException(&lt;span style="color: #a31515;"&gt;"parm1"&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;L'istanza della classe JsonObject è il parametro operationInput. Il nostro codice dovrà provare a prendere i&amp;nbsp;valori utilizzando i metodi TryGet inclusi in JsonObject.&lt;br /&gt;Abbiamo a disposizione:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;TryGetArray&lt;/li&gt;&lt;li&gt;TryGetAsBooolean&lt;/li&gt;&lt;li&gt;TryGetAsData&lt;/li&gt;&lt;li&gt;TryGetAsDouble&lt;/li&gt;&lt;li&gt;TryGetAsLong&lt;/li&gt;&lt;li&gt;TryGetJsonObject (gestione di oggetti di oggetti nidificati)&lt;/li&gt;&lt;li&gt;TryGetObject&lt;/li&gt;&lt;li&gt;TryGetString&lt;/li&gt;&lt;/ul&gt;Questi metodi permettono di estrarre il valore dei parametri JSON ed assegnarli a variabili nel nostro progetto. Successivamente potremo utilizzare queste variabili per creare gli ArcObjects che ci occorrono.&lt;br /&gt;&lt;br /&gt;Per deserializzare le geometrie possiamo utilizzare il metodo&amp;nbsp;&amp;nbsp;SOESupport.Conversion.ToGeometry()&amp;nbsp; che prende un oggetto JSON o una stringa di input&amp;nbsp;e restituisce una IGeometry. Abbiamo anche ToSpatialReference che, data una stringa, restituisce uno ISpatialReference e ToJson che serializza in stringa Json UTF8 come array di byte&amp;nbsp;un IRecordSet o una IGeometry.&lt;br /&gt;&lt;br /&gt;In questo esempio vediamo un extension method per convertire oggetti JsonObjects in IGeometry (&lt;strong&gt;nota: alla fine è stato posto un try/catch perchè con la cultura IT è possibili aver problemi con la funzione TryGetDouble per il separatore decimale. L'alternativa è impostare nel web.config dell'applicazione rest ESRI la cultura IT&lt;/strong&gt;):&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: grey;"&gt;        ///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;restituisce&amp;nbsp;la&amp;nbsp;Geometry&amp;nbsp;corrispondente&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;param&amp;nbsp;name=&lt;/span&gt;&lt;span style="color: grey;"&gt;"jsonObjectGeometry"&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;oggetto&amp;nbsp;JsonObject&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;restituisce&amp;nbsp;la&amp;nbsp;IGeometry&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IGeometry&lt;/span&gt;&amp;nbsp;ConvertAnyJsonGeometry(&lt;span style="color: blue;"&gt;this&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;JsonObject&lt;/span&gt;&amp;nbsp;jsonObjectGeometry)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;object&lt;/span&gt;[]&amp;nbsp;objArray;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////double?&amp;nbsp;nullable;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(jsonObjectGeometry.TryGetArray(&lt;span style="color: #a31515;"&gt;"rings"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;out&lt;/span&gt;&amp;nbsp;objArray))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Conversion&lt;/span&gt;.ToGeometry(jsonObjectGeometry,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;esriGeometryType&lt;/span&gt;.esriGeometryPolygon);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(jsonObjectGeometry.TryGetArray(&lt;span style="color: #a31515;"&gt;"paths"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;out&lt;/span&gt;&amp;nbsp;objArray))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Conversion&lt;/span&gt;.ToGeometry(jsonObjectGeometry,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;esriGeometryType&lt;/span&gt;.esriGeometryPolyline);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(jsonObjectGeometry.TryGetArray(&lt;span style="color: #a31515;"&gt;"points"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;out&lt;/span&gt;&amp;nbsp;objArray))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Conversion&lt;/span&gt;.ToGeometry(jsonObjectGeometry,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;esriGeometryType&lt;/span&gt;.esriGeometryMultipoint);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Conversion&lt;/span&gt;.ToGeometry(jsonObjectGeometry,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;esriGeometryType&lt;/span&gt;.esriGeometryPoint);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;catch&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Conversion&lt;/span&gt;.ToGeometry(jsonObjectGeometry,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;esriGeometryType&lt;/span&gt;.esriGeometryEnvelope);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;catch&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Chiaramente un controllo sull'oggetto è sempre essenziale per questi metodi. Se l'oggetto non contiene i dati necessari per costruire il punto, avremo un'eccezione.&lt;br /&gt;&lt;br /&gt;Ma ora vediamo l'operazione inversa . Una volta completata la nostra business logic dobbiamo serializzare i nostri risultati in JSON o in stream indietro al client.&lt;br /&gt;Vediamo come serializzare i risultati in JSON.&lt;br /&gt;&lt;br /&gt;Per generare una risposta JSON possiamo creare&amp;nbsp; un'istanza della classe JsonObject ed aggiungere dati utilizzando i metodi che ci mette a disposizione&amp;nbsp; JsonObject.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: #2b91af;"&gt;JsonObject&lt;/span&gt;&amp;nbsp;jsonPoint;&lt;br /&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(!operationInput.TryGetJsonObject(&lt;span style="color: #a31515;"&gt;"location"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;out&lt;/span&gt;&amp;nbsp;jsonPoint))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"location"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #2b91af;"&gt;IPoint&lt;/span&gt;&amp;nbsp;location&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Conversion&lt;/span&gt;.ToGeometry(jsonPoint,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;esriGeometryType&lt;/span&gt;.esriGeometryPoint)&amp;nbsp;&lt;span style="color: blue;"&gt;as&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IPoint&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Nell'esempio creaimo un oggetto JsonObject ed aggiungiamo una stringa con la proprietà parm1 e con il valore parm1Value. Se parm1Value ha il valore 'myFirstParameter' il risultato del JSON sarà:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: #2b91af;"&gt;JsonObject&lt;/span&gt;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;JsonObject&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result.AddString(&lt;span style="color: #a31515;"&gt;"parm1"&lt;/span&gt;,&amp;nbsp;parm1Value);&lt;/pre&gt;&lt;br /&gt;{&lt;br /&gt;"parm1" : "myFirstParameter"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Come visto per i metodi di deserializzazione, abbiamo i seguenti metodi di serializzazione:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;AddArray&lt;/li&gt;&lt;li&gt;AddBoolean&lt;/li&gt;&lt;li&gt;AddData&lt;/li&gt;&lt;li&gt;AddDouble&lt;/li&gt;&lt;li&gt;AddJsonObject (consente di aggiungere oggetti nidificati)&lt;/li&gt;&lt;li&gt;AddLong&lt;/li&gt;&lt;li&gt;AddObject&lt;/li&gt;&lt;li&gt;AddString&lt;/li&gt;&lt;/ul&gt;Alcune geometrie possono essere serializzate perchè contengono oggetti nidificati e array. Il modo più semplice è utilizzare&amp;nbsp;&amp;nbsp;SOESupport.Conversion.ToJsonObject()&amp;nbsp; per serializzare le geometrie.&lt;br /&gt;Passando un oggetto che implementa IGeometry prenderemo&amp;nbsp;l'oggetto serializzato in&amp;nbsp;Json.&lt;br /&gt;&lt;br /&gt;In questo esempio serializziamo&amp;nbsp;delle IGeometry e creiamo un oggetto Json con una proprietà geometries&amp;nbsp;che contiene un array di oggetti Json (le nostre geometrie&amp;nbsp;serializzate).&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: green;"&gt;            //&amp;nbsp;Creiamo&amp;nbsp;una&amp;nbsp;lista&amp;nbsp;vouta&amp;nbsp;di&amp;nbsp;JsonObjects.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;JsonObject&lt;/span&gt;&amp;gt;&amp;nbsp;jsonGeometries&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;JsonObject&lt;/span&gt;&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;JsonObject&lt;/span&gt;&amp;nbsp;jsonResultsGeometry&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Conversion&lt;/span&gt;.ToJsonObject(resultsGeometry);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;jsonGeometries.Add(jsonResultsGeometry);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;JsonObject&lt;/span&gt;&amp;nbsp;resultJsonObject&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;JsonObject&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resultJsonObject.AddArray(&lt;span style="color: #a31515;"&gt;"geometries"&lt;/span&gt;,&amp;nbsp;jsonGeometries.ToArray());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;byte&lt;/span&gt;[]&amp;nbsp;result&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Encoding&lt;/span&gt;.UTF8.GetBytes(resultJsonObject.ToJson());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;result;&lt;/pre&gt;&lt;br /&gt;Json&amp;nbsp;prodotto:&lt;br /&gt;&lt;br /&gt;"geometries" : [&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "rings" : [&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 537677.56250619888,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4900994.4999926779&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 537952.21783445403,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4900502.2883762196&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 537942.24243737175,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4900503.3471435569&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; etc. . .&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "rings" : [&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 537952.21783445403,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4900502.2883762196&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 537677.56250619888,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4900994.4999926779&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 537826.87501833774,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4901122.9999607969&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; etc . . .&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; ]&lt;br /&gt;&lt;br /&gt;Lato client: ad esempio, utilizzando le API ESRI Javascript, possiamo ciclare attraverso queste geometrie e&amp;nbsp;creare un&amp;nbsp;Polygon da visualizzare in mappa.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: blue;"&gt;      var&lt;/span&gt;&amp;nbsp;geometries&amp;nbsp;=&amp;nbsp;response.geometries;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkgreen;"&gt;//&amp;nbsp;Loop&amp;nbsp;through&amp;nbsp;all&amp;nbsp;graphics&amp;nbsp;in&amp;nbsp;the&amp;nbsp;JSON.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0,&amp;nbsp;il&amp;nbsp;=&amp;nbsp;geometries.length;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;il;&amp;nbsp;i++)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkgreen;"&gt;//&amp;nbsp;Make&amp;nbsp;a&amp;nbsp;new&amp;nbsp;polygon.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;polygon&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;esri.geometry.Polygon(sr);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkgreen;"&gt;//&amp;nbsp;Loop&amp;nbsp;through&amp;nbsp;all&amp;nbsp;rings&amp;nbsp;in&amp;nbsp;the&amp;nbsp;JSON&amp;nbsp;and&amp;nbsp;add&amp;nbsp;to&amp;nbsp;polygon.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;j&amp;nbsp;=&amp;nbsp;0,&amp;nbsp;jl&amp;nbsp;=&amp;nbsp;geometries[i].rings.length;&amp;nbsp;j&amp;nbsp;&amp;lt;&amp;nbsp;jl;&amp;nbsp;j++)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;polygon.addRing(geometries[i].rings[j]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkgreen;"&gt;//&amp;nbsp;Create&amp;nbsp;a&amp;nbsp;graphic&amp;nbsp;from&amp;nbsp;the&amp;nbsp;polygon&amp;nbsp;and&amp;nbsp;add&amp;nbsp;it&amp;nbsp;to&amp;nbsp;the&amp;nbsp;map.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;currentGraphic&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;esri.Graphic(polygon,&amp;nbsp;symbol,&amp;nbsp;attr,&amp;nbsp;infoTemplate);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;map.graphics.add(currentGraphic);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;br /&gt;E' importante abilitare la nostra SOE a supportare&amp;nbsp;l'utilizzo di&amp;nbsp;servizi basati su MSD. Innanzitutto, perchè l'engine di drawing è più veloce rispetto ai servizi tradizionali basati su mxd, e poi perchè nella versione ArcGIS Server 10.1 i servizi MSD saranno i soli supportati.&lt;br /&gt;Questo però, poichè l'engine di drawing è completamente differente, non supporta completamente tutti gli ArcObjects della libreria Carto e quindi, se il servizio si basa su un MSD, non possiamo utilizzare direttamente gli ArcObjects&amp;nbsp; relativi al documento di mappa come IMap, ILayer, IFeatureLayer o IMapServerObjects.&lt;br /&gt;&lt;br /&gt;A questo punto, il consiglio è utilizzare la classe MapServer e classi/interfaccie collegate, che rappresentano il servizio,&amp;nbsp;nella libreria Carto per prendere informazioni sui layer o per&amp;nbsp;capire come eseguire&amp;nbsp;interrogazioni sul servizio.&lt;br /&gt;&lt;br /&gt;In questo esempio vediamo come accedere ai datasource dei layer della mappa del servizio. Una volta che arriviamo ai datasource, possiamo utilizzare gli ArcObjects per lavorare con i cursori o per eseguire operazioni topologiche. Innazitutto, come abbiamo detto, utilizziamo la classe MapServer per prendere il layer e poi utilizziamo&amp;nbsp;IMapServerDataAccess per prendere i dati sottostanti.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: grey;"&gt;        ///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;restituisce&amp;nbsp;la&amp;nbsp;featureclass&amp;nbsp;dal&amp;nbsp;mapserver&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;param&amp;nbsp;name=&lt;/span&gt;&lt;span style="color: grey;"&gt;"mapServer"&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;oggetto&amp;nbsp;map&amp;nbsp;server&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;param&amp;nbsp;name=&lt;/span&gt;&lt;span style="color: grey;"&gt;"layerID"&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;identificativo&amp;nbsp;del&amp;nbsp;layer&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;restituisce&amp;nbsp;la&amp;nbsp;feature&amp;nbsp;classe&amp;nbsp;del&amp;nbsp;layer&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IFeatureClass&lt;/span&gt;&amp;nbsp;GetFeatureClass(&lt;span style="color: blue;"&gt;this&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IMapServer3&lt;/span&gt;&amp;nbsp;mapServer,&amp;nbsp;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;layerID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IMapServerDataAccess&lt;/span&gt;&amp;nbsp;dataAccess&amp;nbsp;=&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;IMapServerDataAccess&lt;/span&gt;)mapServer;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;dataAccess.GetDataSource(mapServer.DefaultMapName,&amp;nbsp;layerID)&amp;nbsp;&lt;span style="color: blue;"&gt;as&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IFeatureClass&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;br /&gt;L'interfaccia IMapServer3 ha metodi che restituiscono i dati serializzati in JSon utilizzando da IQueryResultOptions la proprietà Format&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;Summary:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Query&amp;nbsp;Result&amp;nbsp;Format.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #2b91af;"&gt;Guid&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"6B819851-6A36-4A6F-8759-58CEF9915B36"&lt;/span&gt;)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;enum&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;esriQueryResultFormat&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;Summary:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Indicates&amp;nbsp;RecordSet.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;esriQueryResultRecordSetAsObject&amp;nbsp;=&amp;nbsp;0,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;Summary:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Indicates&amp;nbsp;KML.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;esriQueryResultKMLAsMime&amp;nbsp;=&amp;nbsp;1,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;Summary:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Indicates&amp;nbsp;KML.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;esriQueryResultKMLAsURL&amp;nbsp;=&amp;nbsp;2,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;Summary:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Indicates&amp;nbsp;JSON.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;esriQueryResultJsonAsMime&amp;nbsp;=&amp;nbsp;3,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;Summary:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Indicates&amp;nbsp;JSON.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;esriQueryResultJsonAsURL&amp;nbsp;=&amp;nbsp;4,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;Summary:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Indicates&amp;nbsp;AMF.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;esriQueryResultAMFAsMime&amp;nbsp;=&amp;nbsp;5,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;Summary:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Indicates&amp;nbsp;AMF.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;esriQueryResultAMFAsURL&amp;nbsp;=&amp;nbsp;6,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;br /&gt;Qui vediamo un esempio di come serializzare il risultato di una query in formato json mediante un stream di byte come risposta della nostra operazione. C'è da sottolineare come possiamo anche contestalmente effettuare una trasformazione di datum mediante la proprietà GeoTransformation della classe QueryResultOptionsClass.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;byte&lt;/span&gt;[]&amp;nbsp;FindNearFeatures(&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;layerID,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IPoint&lt;/span&gt;&amp;nbsp;location,&amp;nbsp;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;nbsp;distance)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(layerID&amp;nbsp;&amp;lt;&amp;nbsp;0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ArgumentOutOfRangeException&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"layerID"&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(distance&amp;nbsp;&amp;lt;=&amp;nbsp;0.0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ArgumentOutOfRangeException&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"distance"&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IMapServer3&lt;/span&gt;&amp;nbsp;mapServer&amp;nbsp;=&amp;nbsp;serverObjectHelper.ServerObject&amp;nbsp;&lt;span style="color: blue;"&gt;as&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IMapServer3&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(mapServer&amp;nbsp;==&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Exception&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Unable&amp;nbsp;to&amp;nbsp;access&amp;nbsp;the&amp;nbsp;map&amp;nbsp;server."&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IGeometry&lt;/span&gt;&amp;nbsp;queryGeometry&amp;nbsp;=&amp;nbsp;((&lt;span style="color: #2b91af;"&gt;ITopologicalOperator&lt;/span&gt;)location).Buffer(distance);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ISpatialFilter&lt;/span&gt;&amp;nbsp;filter&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;SpatialFilterClass&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filter.Geometry&amp;nbsp;=&amp;nbsp;queryGeometry;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filter.SpatialRel&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;esriSpatialRelEnum&lt;/span&gt;.esriSpatialRelIntersects;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IQueryResultOptions&lt;/span&gt;&amp;nbsp;resultOptions&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;QueryResultOptionsClass&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resultOptions.Format&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;esriQueryResultFormat&lt;/span&gt;.esriQueryResultJsonAsMime;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;AutoTimer&lt;/span&gt;&amp;nbsp;timer&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;AutoTimer&lt;/span&gt;();&amp;nbsp;&lt;span style="color: green;"&gt;//starts&amp;nbsp;the&amp;nbsp;timer&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IMapTableDescription&lt;/span&gt;&amp;nbsp;tableDesc&amp;nbsp;=&amp;nbsp;GetTableDesc(mapServer,&amp;nbsp;layerID);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.LogMessage(&lt;span style="color: #2b91af;"&gt;ServerLogger&lt;/span&gt;.&lt;span style="color: #2b91af;"&gt;msgType&lt;/span&gt;.infoDetailed,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"FindNearFeatures"&lt;/span&gt;,&amp;nbsp;-1,&amp;nbsp;timer.Elapsed,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"Finding&amp;nbsp;table&amp;nbsp;description&amp;nbsp;elapsed&amp;nbsp;this&amp;nbsp;much."&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IQueryResult&lt;/span&gt;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;mapServer.QueryData(mapServer.DefaultMapName,&amp;nbsp;tableDesc,&amp;nbsp;filter,&amp;nbsp;resultOptions);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;result.MimeData;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Per abilitare la nostra SOE a supportare un servizio msd occorre, quando si registra, impostare la proprietà SupportsMSD a true cosicchè, quando pubblichiamo, possiamo vedere il servizio nella lista di quelli disponibili.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&amp;nbsp;           &lt;span style="color: green;"&gt;//&amp;nbsp;Proprietà&amp;nbsp;per&amp;nbsp;definire&amp;nbsp;il&amp;nbsp;support&amp;nbsp;msd&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;serverObjectExtensionType.Info.SetProperty(&lt;span style="color: #a31515;"&gt;"SupportsMSD"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"true"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;Richiesto&amp;nbsp;per&amp;nbsp;abilitare&amp;nbsp;l'esposizione&amp;nbsp;della&amp;nbsp;SOE&amp;nbsp;con&amp;nbsp;ArcGIS&amp;nbsp;Server&amp;nbsp;REST&amp;nbsp;endpoint&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;serverObjectExtensionType.Info.SetProperty(&lt;span style="color: #a31515;"&gt;"SupportsREST"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"true"&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;Se il nostro servizio è protetto, le regole di autenticazione sono applicate a tutte le&amp;nbsp;extension del servizio, comprese le custom. &lt;a href="http://rexdotnet.blogspot.com/2011/04/get-current-user-info-within-server.html"&gt;Qui &lt;/a&gt;potete vedere come recuperare l'utente via codice. (Disponibile dalla 10 sp2)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Debug della SOE&lt;/strong&gt;&lt;br /&gt;Le SOE sono componenti COM che sono in esecuzione all'interno di ArcGIS Server e quindi occorre una specifica tecnica per l'attività di debugging.&lt;br /&gt;Innanzitutto, l'assembly della SOE deve essere registrato con l'opzione &lt;strong&gt;/codebase, &lt;/strong&gt;la quale crea nel registro una voce di codebase che specifica il percorso della dll per un assembly che non è specificato nella GAC (cache globale degli assembly). Il file che specifichiamo con /codebase deve essere un assembly con nome forte. In Visual Studio questo può essere facilmente impostato andando nelle pagine delle proprietà del progetto in &lt;strong&gt;Signing&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/bitmaps/652a31ce-4f02-43b5-bba9-9db26ce231af7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="424" r6="true" src="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/bitmaps/652a31ce-4f02-43b5-bba9-9db26ce231af7.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Per eseguire un'attività di debugging sul server object container (SOC), impostare il processo ArcSOC.exe ad un minimo ed un massimo numero di istanze per servizio che ospita la SOE pari ad 1.&lt;br /&gt;Questo evita che più di un processo SOC ospiti la nostra SOE; inoltre si potrebbero fermare tutti gli altri servizi per ridurre il numero di SOC e quindi si potrebbe selezionare più agevolmente il processo quando si esegue il debug.&lt;br /&gt;&lt;br /&gt;Ricordarsi che ArcGIS server&amp;nbsp;ha comunque due processi ArcSOC.exe che utilizza per le proprie&amp;nbsp;attività (cancellazione file in arcgisoutput, logging arcgis server ecc.) .&lt;br /&gt;Se ci sono molti processi SOC in esecuzione e&amp;nbsp;non vogliamo interromperli, agganciamo il debugger a tutti i processi ArcSOC gestiti per amministrarli.&lt;br /&gt;&lt;br /&gt;Una volta che il servizio con abilitata la SOE è in esecuzione in ArcGIS Server, agganciamo&amp;nbsp;da Visual Studio il debugger al processo della SOC relativo.&lt;br /&gt;&lt;br /&gt;I passi da seguire sono:&lt;br /&gt;&lt;br /&gt;1) Aprire da Visual Studio la soluzione e i progetti contenenti l'implementazione della SOE.&lt;br /&gt;&lt;br /&gt;2) Selezionare il menu &lt;strong&gt;Debug&lt;/strong&gt; e selezionare &lt;strong&gt;Attach to Process &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/bitmaps/652a31ce-4f02-43b5-bba9-9db26ce231af8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="384" r6="true" src="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/bitmaps/652a31ce-4f02-43b5-bba9-9db26ce231af8.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;3) Una volta selezionato Attach to Process ci comparirà una maschera con l'elenco dei processi disponibili.&lt;br /&gt;Se i processi ArcSOC.exe non sono visualizzati, spuntare le checkbox &lt;strong&gt;Show processes from all users &lt;/strong&gt;e&lt;strong&gt; Show processes in all sessions. &lt;/strong&gt;Occorre trovare i processi ArcSOC.exe che hanno&amp;nbsp;nella colonna Type la voce "Managed, x86". Se ce n'è più di 1 determinare qual è quello associato con il servizio che ospita la SOE.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/bitmaps/652a31ce-4f02-43b5-bba9-9db26ce231af9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="448" r6="true" src="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/bitmaps/652a31ce-4f02-43b5-bba9-9db26ce231af9.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;4) Una volta selezionato il processo ArcSOC.exe, occorre&amp;nbsp;cliccare su &lt;strong&gt;Attach.&lt;/strong&gt; Un messaggio sui possibili pericoli di processi potenzialmente pericolosi vi avvertirà. Poichè siamo in un contesto di testing&amp;nbsp; sicuro, confermiamo clicchiamo su &lt;strong&gt;Attach.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/bitmaps/652a31ce-4f02-43b5-bba9-9db26ce231af10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="376" r6="true" src="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/bitmaps/652a31ce-4f02-43b5-bba9-9db26ce231af10.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;5) A questo punto inseriamo un breakpoint nel codice della SOE.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/bitmaps/652a31ce-4f02-43b5-bba9-9db26ce231af11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="458" r6="true" src="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/bitmaps/652a31ce-4f02-43b5-bba9-9db26ce231af11.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;6) Dal cliente che utilizza la SOE eseguiamo una richiesta dove è coinvolto il nostro breakpoint aggiunto precedentemente.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/bitmaps/652a31ce-4f02-43b5-bba9-9db26ce231af12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="554" r6="true" src="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/bitmaps/652a31ce-4f02-43b5-bba9-9db26ce231af12.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;7) A questo punto l'esecuzione si fermerà al nostro breakpoint consetendoci di proseguire in debug.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/bitmaps/652a31ce-4f02-43b5-bba9-9db26ce231af13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="458" r6="true" src="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/bitmaps/652a31ce-4f02-43b5-bba9-9db26ce231af13.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;8)&amp;nbsp; Una volta che il debug è terminato o fermato Visual Studio si 'stacca' da ArcSOC.exe.&lt;br /&gt;&lt;br /&gt;9) Se abbiamo la necessità di modificare il codice ed abbiamo registrato la SOE con l'opzione codebase, fermiamo il servizio arcgis server che utilizza la SOE, modifichiamo il codice, ricompiliamo il progetto e facciamo ripartire il servizio. Non c'è la necessità&amp;nbsp;di rieseguire un regasm per la registrazione della dll o riaggiungerla alla GAC.&lt;br /&gt;&lt;br /&gt;Infine, per poter eseguire un'attività di debug sul metodo Costruct, occorre inserire un ritardo di n secondi. In questo caso abbiamo&amp;nbsp;per esempio 20 secondi di tempo&amp;nbsp;per agganciare il processo&amp;nbsp;e andare&amp;nbsp;in debug sul costruct della SOE.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Courier New;"&gt;&lt;span style="color: blue;"&gt;#region&lt;/span&gt;&amp;nbsp;IObjectConstruct&amp;nbsp;Members&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;Metodo&amp;nbsp;che&amp;nbsp;parte&amp;nbsp;all'inizio&amp;nbsp;quando&amp;nbsp;si&amp;nbsp;avvia&amp;nbsp;la&amp;nbsp;SOE&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;param&amp;nbsp;name=&lt;/span&gt;&lt;span style="color: grey;"&gt;"props"&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;proprietà&amp;nbsp;della&amp;nbsp;SOE&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;Construct(IPropertySet&amp;nbsp;props)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;////ho&amp;nbsp;20&amp;nbsp;sec&amp;nbsp;per&amp;nbsp;attaccare&amp;nbsp;il&amp;nbsp;processo&amp;nbsp;e&amp;nbsp;debuggare&amp;nbsp;il&amp;nbsp;costruttore&amp;nbsp;dopo&amp;nbsp;aver&amp;nbsp;avviato&amp;nbsp;il&amp;nbsp;servizi&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Threading.&lt;span style="color: #2b91af;"&gt;Thread&lt;/span&gt;.Sleep(20000);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;AutoTimer&lt;/span&gt;&amp;nbsp;timer&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;AutoTimer&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.logger.LogMessage(&lt;span style="color: #2b91af;"&gt;ServerLogger&lt;/span&gt;.&lt;span style="color: #2b91af;"&gt;msgType&lt;/span&gt;.infoSimple,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"Construct"&lt;/span&gt;,&amp;nbsp;-1,&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.soeName&amp;nbsp;+&amp;nbsp;&lt;span style="color: #a31515;"&gt;":&amp;nbsp;il&amp;nbsp;costruttore&amp;nbsp;è&amp;nbsp;stato&amp;nbsp;avviato."&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.configProps&amp;nbsp;=&amp;nbsp;props;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Property Page per una server object extension&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Se creiamo una SOE che deve essere utilizzata da più di un servizio è facile che abbiamo l'esigenza di impostare parametri in funzione del servizio utilizzato. Ad esempio,&amp;nbsp;desideriamo impostare un determinato&amp;nbsp;layer ad essere coinvolto nelle richieste della SOE ma non altri, oppure impostare parametri che siano indipendenti dalla richiesta&amp;nbsp;fatta dal client -&amp;nbsp;ad esempio il numero massimo di record restituiti per la nostra elaborazione (potrebbe essere nel caso specifico un override del parametro del servizio stesso).&lt;br /&gt;In queste situazioni, possiamo costruire una property page che si&amp;nbsp;posizionerà nella scheda delle capabilities della maschera di dialogo delle proprietà del servizio in ArcCatalog o in ArcGIS Server Manager&lt;br /&gt;Chiaramente, se&amp;nbsp;la SOE&amp;nbsp;dipende da proprietà&amp;nbsp;del property page, non possiamo utilizzare l'Add New Service Wizard poichè per poterla utilizzare dobbiamo impostare queste proprietà. Quindi in questo caso le alternative sono due: o impostiamo dei valori di default nelle proprietà che abbbiamo creato per la SOE, oppure pubblichiamo il servizio senza SOE abilitata e poi andiamo sui servizi, fermiamo il servizio, impostiamo le proprietà &amp;nbsp;dalla property page e riavviamo il servizio.&lt;br /&gt;&lt;br /&gt;Per sviluppare una property page creiamo una nuova Windows Form. Le proprietà della SOE&amp;nbsp;possono essere impostate&amp;nbsp;basandosi sugli eventi della form (per esempio cambio selezione di una combobox).&lt;br /&gt;&lt;br /&gt;Dobbiamo implementare&amp;nbsp;&amp;nbsp;ESRI.ArcGIS.Framework.IComPropertyPage e ESRI.ArcGIS.CatalogUI.IAGSSOEParameterPage&amp;nbsp; per la nostra page per inserirla in ArcCatalog.&lt;br /&gt;&lt;br /&gt;La nostra page deve implementare per la IComPropertyPage&amp;nbsp; i seguenti membri:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;PageSite&lt;/li&gt;&lt;li&gt;Activate&lt;/li&gt;&lt;li&gt;Show&lt;/li&gt;&lt;li&gt;Hide&lt;/li&gt;&lt;/ul&gt;I membri Height&amp;nbsp;e Deactivate non sono richiesti ma se necessari possiamo implementarli mentri i rimanenti non sono utilizzati.&lt;br /&gt;&lt;br /&gt;L'Interfaccia IAGSSOEParameterPage definisce un insieme di proprietà per la SOE che devono essere esplicitamente implementate. Queste includono:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Tipo di servizio&amp;nbsp;&amp;nbsp;(ServerObjectType)&lt;/li&gt;&lt;li&gt;Proprietà non relazionate alla SOE (ServerObjectProperties)&lt;/li&gt;&lt;li&gt;Nome della SOE (ServerObjectExtensionType)&lt;/li&gt;&lt;li&gt;Proprietà che definiamo per la SOE (ExtensionProperties)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Ad esempio, qui possiamo vedere &lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/0001/00010000019q000000.htm"&gt;Come creare pagine property SOE&amp;nbsp;&lt;/a&gt;:&amp;nbsp;come usare il set della proprietà ServerObjectProperties per farsi restituire il percorso del documento di mappa ed eseguire proprie logiche per farsi restituire il layer ed i propri campi.&lt;br /&gt;&lt;br /&gt;Quando una SOE è abilitata in ArcCatalog cliccando OK o Apply, le sue proprietà sono restituite dalla pagina della SOE property attraverso il get della proprietà ExtensionProperties. Queste proprietà restituite sono aggiunte al file di configurazione del servizio di mappa ( C:\Program Files\ArcGIS\Server10.0\server\user\cfg ). Quando vengono effettuate modifiche alle proprietà della SOE, queste si riflettono nella property page attraverso il set della proprietà ExtensionProperties.&lt;br /&gt;&lt;br /&gt;Per semplificare il codice della property page, potremmo voler implementare le nostre interfacce richieste (&amp;nbsp;IComPropertyPage and IAGSSOEParameterPage ) in una classe astratta e poi raggruppare la logica che le implementa in una classe separata che eredita dalla classe astratta.&lt;br /&gt;&lt;br /&gt;Negli esempi ESRI troverete la classe astratta in SOEPropertyPage.cs e la PropertyPage.cs che eredita da essa. Tutto il codice con i set e i get delle proprietà della SOE&amp;nbsp;è implementato nella PropertyPage.cs.&lt;br /&gt;&lt;br /&gt;La nostra property page deve contenere del codice&amp;nbsp;che quando è registrato con il COM&amp;nbsp;include la categoria del componente&amp;nbsp;AGSSOEParameterPages. &amp;nbsp;Le categorie del componente sono utilizzate dall'applicazione client per determinare in modo efficiente tutte le componenti di un particolare tipo che sono installate&amp;nbsp;nel sistema. Se le categorie del componente non sono utilizzate, l'applicazione avrebbe dovuto&amp;nbsp;istanziare ogni componente COM ed interrogarla per vedere se supporta la funzionalità richiesta -&amp;nbsp;il&amp;nbsp;che non è un approccio pratico.&lt;br /&gt;&lt;br /&gt;ArcCatalog&amp;nbsp;cerca soltanto&amp;nbsp; le pagine property&amp;nbsp;nella categoria del &amp;nbsp;componente AGSSOEParameterPages.&amp;nbsp; Nella classe in SOEPropertyPage.cs&amp;nbsp;il seguente codice assicura che la pagina property è registrata nella categoria AGSSOEParameterPages.&lt;br /&gt;&lt;br /&gt;Per verificarlo possiamo eseguire categories.exe in &amp;lt;ArcGIS Desktop install&amp;gt;\bin&amp;nbsp;ed espandere la categoria ESRI AGS Extension Parameter Pages. Qui potremo vedere anche altre pagine sviluppate da ESRI (KML, WCS, WFS ecc) che sono SOE.&lt;br /&gt;&lt;br /&gt;Una volta sviluppata la nostra property page, dobbiamo registrare il COM così che i tipi .NET e la windows form possano essere utilizzati in ArcCatalog&lt;br /&gt;&lt;br /&gt;In &amp;lt;Program files&amp;gt;\Common Files\ArcGIS\bin abbiamo l'utility ESRIRegAsm.exe:&lt;br /&gt;&lt;br /&gt;&lt;pre xml:space="preserve"&gt;ESRIRegAsm.exe "&amp;lt;path to ArcCatalog property page dll&amp;gt;" /p:Desktop&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Qui potete vedere un esempio&lt;/strong&gt;: &lt;a href="http://resources.arcgis.com/gallery/file/arcobjects-net-api/details?entryID=C1D79B4A-1422-2418-7F85-D12BA0680EAA"&gt;Print SOE Rest&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Instructions&lt;/strong&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Print SOE Rest&lt;/span&gt;&lt;br /&gt;Author: Domenico Ciavarella &lt;br /&gt;&lt;a href="http://www.studioat.it/"&gt;http://www.studioat.it/&lt;/a&gt;&lt;br /&gt;February 13th 2011&lt;br /&gt;Summary:&lt;br /&gt;This solution (developed in c#) creates a SOE Rest in arcgis server to print template mxd from client.&lt;br /&gt;For now you can print services arcgis server and format pdf.&lt;br /&gt;&lt;br /&gt;Installation:&lt;br /&gt;a) register unregister dll and soe&lt;br /&gt;&amp;nbsp;- register dll in SOC machine&lt;br /&gt;&amp;nbsp;1) %WinDir%\Microsoft.NET\Framework\v2.0.50727\regasm Studioat.ARCGIS.SOE.REST.dll /codebase&lt;br /&gt;&lt;br /&gt;&amp;nbsp;- register soe in ArcGIS server (SOM)&lt;br /&gt;&amp;nbsp;1) Studioat.ARCGIS.SOE.Register.exe -c Studioat.ARCGIS.SOE.REST.Print -n Print -l "Your title"&lt;br /&gt;&lt;br /&gt;for unregister&lt;br /&gt;&amp;nbsp;1) Studioat.ARCGIS.SOE.Register.exe -n Print -u&lt;br /&gt;&amp;nbsp;2) %WinDir%\Microsoft.NET\Framework\v2.0.50727\regasm Studioat.ARCGIS.SOE.REST.dll /codebase /u&lt;br /&gt;&lt;br /&gt;b) create a service map and enable in capabilities the extension. The msd&amp;nbsp;used for&amp;nbsp;the service that is published isn't important because it is not used.&lt;br /&gt;c) in the same directory where the msd is we must create a folder called 'Applications'. Here we create as many folder as our printing applications are and in each of them we put the mxds which will be used for printing.&lt;br /&gt;&amp;nbsp;&amp;nbsp; ---yourmsdpublish.msd&lt;br /&gt;&amp;nbsp;&amp;nbsp; ---Applications (folder)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MyAppWorld (folder)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; templateWorld.mxd&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;other mxds&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MyApplicationsRiver (folder)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; River1.mxd&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TemplateRivers.mxd&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and so on...&lt;br /&gt;d) from service directory yuo can see all your applications&lt;br /&gt;&lt;a href="http://localhost/ArcGIS/rest/services/%3Cyourservice%3E/MapServer/exts/Print"&gt;http://localhost/ArcGIS/rest/services/%3Cyourservice%3E/MapServer/exts/Print&lt;/a&gt;&lt;br /&gt;&lt;a href="http://localhost/ArcGIS/rest/services/%3Cyourservice%3E/MapServer/exts/Print"&gt;&lt;/a&gt;e) see all template of application with id=0&lt;br /&gt;&lt;a href="http://localhost/ArcGIS/rest/services/%3Cyourservice%3E/MapServer/exts/Print/applications/0"&gt;http://localhost/ArcGIS/rest/services/%3Cyourservice%3E/MapServer/exts/Print/applications/0&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;f) see parameter for print template with id=0 and application with id=0&lt;br /&gt;&lt;a href="http://localhost/ArcGIS/rest/services/%3Cyourservice%3E/MapServer/exts/Print/applications/0/templates/0/printtemplate"&gt;http://localhost/ArcGIS/rest/services/%3Cyourservice%3E/MapServer/exts/Print/applications/0/templates/0/printtemplate&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Parameters:&lt;a href="http://localhost/ArcGIS/rest/services/%3Cyourservice%3E/MapServer/exts/Print/applications/0/templates/0/printtemplateParameters:"&gt;&lt;br /&gt;&lt;/a&gt;1) extent: Geometry Envelope (see rest api esri)&lt;br /&gt;example:&lt;br /&gt;{"xmin":-8582617.03619766,"ymin":4896408.449978509,"xmax":-8535608.26380234,"ymax":4915441.270021492,"spatialReference":{"wkid":102113}}&lt;br /&gt;2) scale: number (optional)&lt;br /&gt;3) services: array objects (name, serverConnection, transparency(optional), layers (optional))&lt;br /&gt;[{"name":"World_Street_Map", "serverConnection":"&lt;a href="http://server.arcgisonline.com/ArcGIS/services"&gt;http://server.arcgisonline.com/ArcGIS/services&lt;/a&gt;"}, { "name":"ArcPyMapping/Birds", "serverConnection":"&lt;a href="http://ec2-50-17-53-73.compute-1.amazonaws.com/ArcGIS/services"&gt;http://ec2-50-17-53-73.compute-1.amazonaws.com/ArcGIS/services&lt;/a&gt;", "transparency":50}]&lt;br /&gt;name: name of service&lt;br /&gt;serverConnection: connection to server&lt;br /&gt;transparency: effect transparency of layer&lt;br /&gt;layers: (visibility layers of service: see parameter layers in export map of rest api esri) &lt;br /&gt;4) properties: (optional).&amp;nbsp;&amp;nbsp;Object (texts (optional), graphics(optional))&lt;br /&gt;{"texts":[{"text":"texttitle","value":"Map title"},{"text":"textscala","value":""}],"graphics":[{"geometry":{"x":-8556360.916981738,"y":4907186.070966704,"spatialReference":{"wkid":102113}},"symbol":{"color":[0,255,0,64],"size":7.5,"angle":0,"xoffset":0,"yoffset":0,"type":"esriSMS","style":"esriSMSSquare","outline":{"color":[255,0,0,255],"width":0.75,"type":"esriSLS","style":"esriSLSSolid"}}},{"geometry":{"x":-8557583.909434298,"y":4904778.3045757245,"spatialReference":{"wkid":102113}},"symbol":{"color":[0,255,0,64],"size":7.5,"angle":0,"xoffset":0,"yoffset":0,"type":"esriSMS","style":"esriSMSSquare","outline":{"color":[255,0,0,255],"width":0.75,"type":"esriSLS","style":"esriSLSSolid"}}}]}&lt;br /&gt;texts: array of objects (text, value)&lt;br /&gt;if in template in pagelayout you have added graphic texts with name %My name% you return list from (example application=0 and template=0)&lt;br /&gt;http://localhost/ArcGIS/rest/services/&amp;lt;my service&amp;gt;/MapServer/exts/Print/applications/0/templates/0?f=pjson&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; "name" : "TemplateA4_3",&lt;br /&gt;&amp;nbsp; "id" : 0,&lt;br /&gt;&amp;nbsp; "texts" : [&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "textscala",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "texttitle"&lt;br /&gt;&amp;nbsp; ]&lt;br /&gt;}&lt;br /&gt;graphics: array of graphics (from esri api javascript: yourgraphic.toJson())&lt;br /&gt;5) resolution: number (optional) range from 150 to 600. If you want to change this range you must change in code (there are two constants)&lt;br /&gt;6) options: array properties for pdf (optional)&lt;br /&gt;{"embedFonts": true, "imageCompression":"esriExportImageCompressionDeflate" ...}&lt;br /&gt;&lt;br /&gt;I have added in file zip an example in api esri javascript to see&amp;nbsp; how to use.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8323071861123024882-8306198404309993741?l=nicogis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicogis.blogspot.com/feeds/8306198404309993741/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8323071861123024882&amp;postID=8306198404309993741' title='8 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/8306198404309993741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8323071861123024882/posts/default/8306198404309993741'/><link rel='alternate' type='text/html' href='http://nicogis.blogspot.com/2011/03/soe-server-object-extension-rest.html' title='SOE (Server Object Extension) Rest'/><author><name>Ing. Domenico Ciavarella</name><uri>http://www.blogger.com/profile/11116200904149667988</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-hc7A5NAVWEU/TbxOnHjqZPI/AAAAAAAAALM/8Mvi5N0jizs/s220/001.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-dayGw0I5eYs/TXfQq6adXpI/AAAAAAAAAKs/gM7iEHzO0rw/s72-c/soeTemplate.JPG' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8323071861123024882.post-218374091179922835</id><published>2011-02-01T04:00:00.043+01:00</published><updated>2011-04-08T11:29:45.219+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCL'/><category scheme='http://www.blogger.com/atom/ns#' term='IRelationalOperator'/><category scheme='http://www.blogger.com/atom/ns#' term='Clementini Felice'/><category scheme='http://www.blogger.com/atom/ns#' term='CBM'/><category scheme='http://www.blogger.com/atom/ns#' term='shape comparison language'/><title type='text'>SCL da client</title><content type='html'>Dalla versione 2.0 di &lt;a href="http://help.arcgis.com/en/webapi/javascript/arcgis/help/jsapi/geometryservice.htm"&gt;ESRI Javascript API&lt;/a&gt; (funzionalità comunque presenti anche in &lt;a href="http://help.arcgis.com/en/webapi/silverlight/1.2/apiref/topic1055.html"&gt;Silverlight API&lt;/a&gt; e &lt;a href="http://resources.esri.com/help/9.3/arcgisserver/apis/flex/apiref/com/esri/ags/tasks/GeometryService.html#relation()"&gt;Flex&lt;/a&gt;) e come &lt;a href="http://resources.esri.com/help//9.3/arcgisserver/apis/rest/relation.html"&gt;REST API da ArcGIS&lt;/a&gt; Server 9.3.1, abbiamo la possibilità di specificare istruzioni in SCL (shape comparison language) per verificare relazioni&amp;nbsp;spaziali fra geometrie. L'SCL è basato sul Calculus-Based Method (CBM) come specificato e definito da Clementini e Felice e con estensioni.&lt;br /&gt;Questa funzionalità espone una funzionalità che già esiste a livello di ArcObjects tramite il metodo &lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#/Relation_Method/002m00000345000000/"&gt;Relation&lt;/a&gt; dell'interfaccia IRelationalOperator.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Il CBM definisce le relazioni tra geometrie tramite l'intersezione tra l'interior, il boundary e l'exterior delle stesse considerando anche le dimensioni delle intersezioni. Le relazioni base che definisce sono Touch, Overlap, In, Cross, e Disjoint. SCL aggiunge anche l'Identical per verificare se due geometrie sono identiche e topologicamente corrette. Le geometrie trattate sono bidimensionali.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Occorre chiarire alcuni concetti accennati per utilizzare l'SCL.&lt;br /&gt;Definizione delle dimensioni visto per le intersezioni:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;- i punti hanno dimensione 0&lt;br /&gt;- le linee hanno dimensione 1&lt;br /&gt;- i poligoni hanno dimensione 2&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;strong&gt;Interior&lt;/strong&gt;: la dimensione dell'interior della geometria è sempre quella della geometria stessa. Tutte le geometrie hanno interior. L'interior di una geometria è definito dall'intera geometria ad esclusione del suo boundary.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;strong&gt;Boundary&lt;/strong&gt;: la dimensione del boundary della geometria è sempre quello della geometria meno 1. Ad esempio, la dimensione del boundary di una linea è 0 mentre quella del punto è –1 o NIL. Le linee e i poligoni hanno un boundary mentre i punti no. Il boundary di una linea sono gli endpoint di tutte le part che compongono la polilinea. Il boundary di un poligono sono le linee del confine.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Exterior&lt;/strong&gt;: l'exterior di qualunque geometria ha sempre dimensione 2. Tutte le geometrie hanno un exterior.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;L'estensione al CBM riguarda la possibilità di verificare se ci sono mancanze di integrità topologica ovverosia verificare se le intersezioni derivino al massimo solo da adiacenza.&lt;br /&gt;In questo caso occorre utilizzare la funzione unaria:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;TOPOFORM = TRUE&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://sampleserver1.arcgisonline.com/arcgis/rest/services/Geometry/GeometryServer/relation?sr=102100&amp;amp;geometries1=%7B%22geometryType%22+%3A+%22esriGeometryPolygon%22%2C%22geometries%22+%3A+%5B%7B%22rings%22%3A%5B%5B%5B0%2C0%5D%2C%5B1%2C0%5D%2C%5B1%2C1%5D%2C%5B0%2C1%5D%2C%5B0%2C0%5D%5D%5D%7D%5D%7D&amp;amp;geometries2=%7B%22geometryType%22+%3A+%22esriGeometryPolygon%22%2C%22geometries%22+%3A+%5B%7B%22rings%22%3A%5B%5B%5B1%2C0%5D%2C%5B2%2C0%5D%2C%5B2%2C1%5D%2C%5B1%2C1%5D%2C%5B1%2C0%5D%5D%5D%7D%5D%7D&amp;amp;relation=esriGeometryRelationRelation&amp;amp;relationParam=TOPOFORM%3Dtrue" target="_blank"&gt;Test&lt;/a&gt;&amp;nbsp;con REST API&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;SCL valuta se l'espressione è vera o falsa ad esclusione dell'istruzione &lt;strong&gt;dim&lt;/strong&gt; che restituisce una dimensione. &lt;br /&gt;&lt;div&gt;Le espressioni possono essere composte da più asserzioni concatenate da operatori logici (&lt;strong&gt;AND OR, XOR&lt;/strong&gt;) . SCL non è case-sensitive.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;strong&gt;(g1 overlap g2 and dim (g2) = area) or (g2 cross g1 and dim (g2) = linear)&lt;/strong&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In questa espressione la dimensione di g2 deve essere un'area e g1 deve rispettare&amp;nbsp;la relazione overlap con g2 oppure g2 deve essere una linea e g1 deve&amp;nbsp;rispettare&amp;nbsp;la relazione cross con&amp;nbsp;g2.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;g1 e g2 sono due parole riservate per indicare rispettivamente la geometria 1 e la geometria 2.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;SCL utilizza costanti numeriche: TRUE, FALSE, POINT, LINEAR, AREA, NIL e NULL. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;SCL non supporta variabili utente. NIL e NULL possono essere utilizzati per indicare una mancanza di uno specifico tipo di intersezione.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;SCL consente di esprimere relazioni spaziali binarie sia come funzioni che come operazione tra due geometrie g1 e g2. g1 e g2 possono anche essere invertiti cross(g2,g1) = true.&lt;/div&gt;Ad esempio l'espressione &lt;strong&gt;g1 cross g2&lt;/strong&gt; è equivalente all'espressione &lt;strong&gt;cross(g1,g2) = true&lt;/strong&gt; oppure la negazione ovverosia non soddisfa la relazione di cross: &lt;strong&gt;g1 not cross g2&lt;/strong&gt; è equivalente a &lt;strong&gt;cross (g1, g2) = false&lt;/strong&gt;&amp;nbsp; o &lt;strong&gt;cross (g1, g2) != true&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;In SCL la funzione &lt;strong&gt;dim &lt;/strong&gt;ha due differenti utilizzi a seconda del numero degli argomenti passati. Se c'è un solo argomento restituisce la dimensione della geometria o della componente geometrica, ad esempio dim(g1) o dim(g1.boundary). Se ci sono due argomenti restituisce la dimensione dell'intersezione tra le due geometrie o componenti, ad esempio dim(g1,g2) o dim(g1.interior,g2.boundary) &lt;br /&gt;&lt;br /&gt;I modificatori degli oggetti spaziali:&amp;nbsp;boundary, interior, and exterior possono essere utilizzati nella forma:&lt;br /&gt;&lt;riferimento entità="" spaziale=""&gt;&lt;entità spaziale=""&gt;&lt;modificatore&gt;&lt;modificatore&gt;&amp;lt;entità&amp;nbsp;geometrica&amp;gt;.&amp;lt;modificatore&amp;gt;&amp;nbsp;: esempio g1.boundary&lt;br /&gt;&lt;br /&gt;Quindi con la prima forma, cioè con un solo argomento, possiamo verificare se sono vere o meno le seguenti espressioni:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;strong&gt;dim (g1.interior) &amp;gt;= linear&lt;/strong&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;strong&gt;dim (g1) = dim(g2)&lt;/strong&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;strong&gt;dim (g1) &amp;gt;= dim(g2.interior)&lt;/strong&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;﻿&lt;/div&gt;mentre con due argomenti potremmo verificare le seguenti espressioni:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;strong&gt;dim(g1.interior,g2) &amp;gt;= linear &lt;/strong&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;strong&gt;dim(g1,g2) = dim(g2)&lt;/strong&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;strong&gt;dim(g1.boundary,g2.boundary)&amp;nbsp;&amp;gt; point&lt;/strong&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Alcune note da ricordare:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;﻿&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Le&amp;nbsp;sette relazioni spaziali possono essere espresse come funzioni o relazioni.&amp;nbsp;Ad esempio,&amp;nbsp;TOUCH può essere espressa come relazione, G1 TOUCH G2, o come funzione, touch (g1,g2) = true. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;La forma della funzione è&amp;nbsp;&amp;nbsp;&lt;relazione(entità entità="" spaziale)="" spaziale,=""&gt;RelazioneSpaziale(EntitàGeometrica,EntitàGeometrica) simbolo di uguaglianza costante&amp;nbsp;booleana&lt;operatore&amp;nbsp;di uguaglianza=""&gt;&amp;nbsp;&lt;costante di="" verità=""&gt;&lt;function (spatial="" entity)="" entity,="" spatial=""&gt;&lt;equality operator=""&gt;&lt;truth constant=""&gt;. &lt;div&gt;La forma della relazione è&amp;nbsp;&lt;entità spaziale=""&gt;&amp;nbsp;&lt;relazione&gt; EntitàGeometrica RelazioneSpaziale EntitàGeometrica&lt;entità spaziale=""&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;I requisiti alla base della logica delle relazioni TOUCH, CROSS, IN, CONTAIN, OVERLAP,&amp;nbsp;e DISJOINT precludono l'uso dei modificatori; si possono utilizzare G1 o G2 come argomenti spaziali, mentre l'uso di modificatori ad esempio G1.BOUNDARY, non è consentito. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;La relazione di intersect consente l'uso dei modificatori BOUNDARY, INTERIOR, ed EXTERIOR per gli argomenti spaziali G1&amp;nbsp;e G2. &lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;strong&gt;g1.interior intersects g2.exterior and g1.boundary intersect g2&lt;/strong&gt; &lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;se la relazione è espressa come una funzione occorre compararla con le costanti true/false:&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;strong&gt;intersect (g1,g2) = true &lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;strong&gt;Relazione spaziale TOUCH &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Applicabile alle coppie di gruppi&amp;nbsp;di tipi&amp;nbsp;area/area, line/line, line/area, point/area,&amp;nbsp;e point/line con i seguenti criteri:&lt;br /&gt;&lt;br /&gt;La dimensione dell'intersezione tra G1&amp;nbsp;e G2 non è nulla. &lt;br /&gt;La dimensione dell'intersezione tra G1.interior&amp;nbsp;e G2.interior&amp;nbsp;è nulla&lt;br /&gt;&lt;br /&gt;G1 TOUCH G2 è quindi equivalente a dire che dim(g1.interior, g2.interior) = null and dim(g1,g2) != null&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Tutte i seguenti esempi sono equivalenti (perchè ereditano sintassi da SCL e CBM): &lt;br /&gt;&lt;div&gt;&lt;/div&gt;G1 TOUCH G2&lt;br /&gt;G1 TOUCHES G2&lt;br /&gt;G1 =* G2&lt;br /&gt;TOUCH (G1,G2) = TRUE&lt;br /&gt;TOUCHES (G1,G2) = TRUE&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Relazione spaziale CROSS&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;Applicabile alle coppie di gruppi di tipi line/line, line/area, point/area,&amp;nbsp;e point/line con i seguenti criteri:&lt;br /&gt;&lt;br /&gt;La dimensione dell'intersezione tra G1 e G2.exterior non è nulla. &lt;br /&gt;La dimensione dell'intersezione tra G2 e G1.exterior non è nulla. &lt;br /&gt;&lt;br /&gt;La dimension dell'intersezione G1.interior e G2.interior non è nulla ed è minore della dimensione di uno o entrambi di G1.interior e G2.interior. &lt;br /&gt;&lt;br /&gt;G1 CROSS G2 equivale a dire: dim(g1.interior, g2.interior) != NIL and (dim(g1.interior, g2.interior)&amp;nbsp;&amp;lt; dim(g1.interior) or dim(g1.interior, g2.interior)&amp;nbsp;&amp;lt; dim(g2.interior)) and dim(g1, g2.exterior) != NIL and dim(g2, g1.exterior) != NIL.&lt;br /&gt;&lt;br /&gt;Tutte i seguenti esempi sono equivalenti (perchè ereditano sintassi da SCL e CBM):&lt;br /&gt;G1 CROSS G2&lt;br /&gt;G1 CROSS G2&lt;br /&gt;G1 =/ G2&lt;br /&gt;CROSS (G1, G2) = TRUE&lt;br /&gt;CROSSES (G1, G2) = TRUE&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Relazione spaziale IN o CONTAIN&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Applicabili a tutti i tipi di gruppi con i seguenti criteri:&lt;br /&gt;L'intersezione delle due geometrie&amp;nbsp;è&amp;nbsp;uguale alla geometria definita come in o contenuta. &lt;br /&gt;&lt;br /&gt;L'intersezione tra&amp;nbsp;l'interior di due geometrie&amp;nbsp;non è nullo.&lt;br /&gt;&lt;br /&gt;G2 IN G1è equivalente a dire: dim (g2, g1.exterior) = null and dim (g1.interior, g2.interior) != null&lt;br /&gt;&lt;br /&gt;Tutte i seguenti esempi sono equivalenti (perchè ereditano sintassi da SCL e CBM):&lt;br /&gt;&lt;br /&gt;G1 IN G2&lt;br /&gt;G1 INSIDE G2&lt;br /&gt;G1 CONTAIN G2&lt;br /&gt;G1 CONTAINS G2&lt;br /&gt;G1 =@ G2&lt;br /&gt;IN (G1, G2) = TRUE /* g1 contenuto da g2 */&lt;br /&gt;INSIDE (G1, G2) = TRUE" /* g1 contenuto da g2 */&lt;br /&gt;CONTAIN (G1, G2) = TRUE" /* g2 contenuto da g1 */&lt;br /&gt;CONTAINS (G1, G2) = TRUE" /* g2 contenuto da g1 */&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Relazione spaziale OVERLAP&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Applicabile alle coppie di gruppi di tipi area/area, line/line,&amp;nbsp;e point/point con i seguenti criteri:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;La dimensione dell'intersezione tra&amp;nbsp;G1 e G2.exterior non è nulla. &lt;br /&gt;&lt;br /&gt;La dimensione dell'intersezione tra&amp;nbsp;G2 e G1.exterior non è nulla. &lt;br /&gt;&lt;br /&gt;La dimensione dell'intersezione tra gli interior delle due geometrie è uguale alla dimensione dell'interior di entrambe le geometrie.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;G1 OVERLAP G2 è equivalente a dire: dim (g1) = dim (g2) and dim (g1) = dim (g1.interior, g2.interior) and dim (g1, g2.exterior) != NULL and dim (g2, g1.exterior) != NULL.&lt;br /&gt;&lt;br /&gt;Tutte i seguenti esempi sono equivalenti (perchè ereditano sintassi da SCL e CBM):&lt;br /&gt;&lt;br /&gt;G1 OVERLAP G2&lt;br /&gt;G1 OVERLAPS G2&lt;br /&gt;G1 =&amp;amp; G2&lt;br /&gt;OVERLAP (G1, G2) = TRUE&lt;br /&gt;OVERLAPS (G1, G2) = TRUE&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Relazione spaziale IDENTICAL&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;Applicabile alle coppie di gruppi di tipi area/area, line/line, e point/point con i seguenti criteri:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;L'intersezione tra le due geometrie è uguale ad ogni geometria&lt;br /&gt;L'integrità topologica esiste tra le due geometrie&amp;nbsp;("topoform"). &lt;br /&gt;&lt;br /&gt;G1 IDENTICAL G2 equivale a dire: dim (g1) = dim (g2) and dim (g1,g2.exterior) = null and dim (g2,g1.exterior) = null and topoform = true.&lt;br /&gt;&lt;br /&gt;L'espressione G1 contains G2 and G2 contains G1 può essere vera dove c'è una mancanza di integrità topologica; pertanto l'espressione G1 identical G2 potrebbe essere falsa, quindi occorre anche che ci sia topoform=true&lt;br /&gt;&lt;br /&gt;Tutte i seguenti esempi sono equivalenti (perchè ereditano sintassi da SCL e CBM):&lt;br /&gt;&lt;br /&gt;G1 IDENTICAL G2&lt;br /&gt;G1 = G2&lt;br /&gt;G1 == G2&lt;br /&gt;IDENTICAL (G1, G2) = TRUE&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Relazione spaziale DISJOINT&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;Applicabili a tutti i tipi di gruppi con i seguenti criteri:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;L'intersezione tra&amp;nbsp;G1 e G2&amp;nbsp;è nulla. &lt;br /&gt;&lt;br /&gt;G1 DISJOINT G2 equivale&amp;nbsp;a dire&amp;nbsp;&amp;nbsp;dim (g1, g2) = NULL&lt;br /&gt;&lt;br /&gt;Tutte i seguenti esempi sono equivalenti (perchè ereditano sintassi da SCL e CBM):&lt;br /&gt;&lt;br /&gt;G1 DISJOINT G2&lt;br /&gt;G1 =! G2&lt;br /&gt;DISJOINT (G1, G2) = TRUE&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Relazione spaziale INTERSECT &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Applicabile a tutti i tipi di gruppi&amp;nbsp;.&amp;nbsp;La relazione&amp;nbsp;INTERSECT consente l'utilizzo di modificatori con i suoi argomenti spaziali. I modificatori sono BOUNDARY, INTERIOR,&amp;nbsp;e EXTERIOR con i seguenti criteri: &lt;br /&gt;&lt;br /&gt;Valuta a&amp;nbsp;TRUE se la dimensione della specificata intersezione non è nulla. &lt;br /&gt;&lt;br /&gt;G1 INTERSECT G2 equivale a dire&amp;nbsp; dim (g1, g2) != NULL.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Alcuni esempi:&lt;br /&gt;G1 INTERSECT G2.BOUNDARY&lt;br /&gt;G1 =? G2&lt;br /&gt;INTERSECT (G1.INTERIOR, G2.INTERIOR) = TRUE&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Funzione spaziale RELATE&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;La funzione RELATE è supportata come funzione unaria per verificare l'intero array 9IM. L'array 9IM ha nove elementi da comparare - tre elementi di una geometria&amp;nbsp;con tre elementi di un'altra geometria. Questi elementi sono boundary, interior, e exterior.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ogni elemento della prima geometria&amp;nbsp;(G1) può essere verificato con ogni elemento della seconda (G2) per verificare&amp;nbsp;se è vero o falso. Gli elementi dell'array possono essere anche ignorati perchè non rilevanti ai fini del test che occorre fare.&lt;br /&gt;&lt;br /&gt;Questo è un esempio della sintassi della funzione RELATE:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;strong&gt;RELATE (G1, G2, 'FFFTTT***')&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;RELATE è una funzione unaria quindi non è confrontata con un true/false.&lt;br /&gt;&lt;br /&gt;Nell'esempio illustrato si confrontano le geometrie G1 e G2.&amp;nbsp;La stringa&amp;nbsp;'FFFTTT***', delimitata da singoli apici, è utilizzata per specificare se l'intersezione di ogni elemento della matrice 9IM è vero (T), false (F) o non testato (*) perchè non rilevante ai fini del test.&amp;nbsp;Ci sono esattamente nove elementi nella stringa, i quali corrispondono a partire da sinistra verso destra alle seguenti nove relazioni:&lt;br /&gt;&lt;br /&gt;1 G1.interior&amp;nbsp; G2.interior &lt;br /&gt;&lt;br /&gt;2 G1.interior G2.boundary &lt;br /&gt;&lt;br /&gt;3 G1.interior G2.exterior&lt;br /&gt;&lt;br /&gt;4 G1.boundary G2.interior&lt;b
