<?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-3306209722829837644</id><updated>2012-02-16T00:35:54.298-08:00</updated><category term='adf javascript'/><category term='lithuania'/><category term='cross-site scripting'/><category term='soap'/><category term='javascript'/><category term='cache'/><category term='silverlight'/><category term='ajax'/><category term='sql server spatial'/><category term='azure'/><category term='arcgis online'/><category term='event handler'/><category term='euc'/><category term='adf'/><category term='rest'/><category term='bing'/><category term='arcims'/><category term='arcgis server'/><category term='wpf'/><category term='licensing'/><category term='dynamic layers'/><category term='arcgis'/><category term='soe'/><category term='mashup'/><category term='maps'/><category term='esri'/><category term='mapit'/><category term='image services'/><category term='windows phone'/><category term='json'/><category term='google'/><category term='server object extension'/><title type='text'>RexHansen.com</title><subtitle type='html'>Tasty tid-bits on ESRI, Microsoft, and the software that binds us together</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rexdotnet.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rexdotnet.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>rex hansen</name><uri>http://www.blogger.com/profile/17162176312798283112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_T5Js6sbq8JI/STJscHpuo0I/AAAAAAAAAAo/XqBIYxGy13E/S220/rexfaceclip.PNG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3306209722829837644.post-5972582399848239656</id><published>2011-07-24T02:33:00.000-07:00</published><updated>2011-07-27T12:48:51.974-07:00</updated><title type='text'>Single-line batch geocoding with ArcGIS Server 10 geocode services</title><content type='html'>ArcGIS Server 10 rolled out support for &lt;a href="http://blogs.esri.com/Dev/blogs/geocoding/archive/2010/11/17/Single_2D00_line-vs.-Multi_2D00_line-geocoding-at-ArcGIS-10.0-and-ArcGIS-10.0-SP1.aspx" target="_blank"&gt;single-line geocoding&lt;/a&gt; via Web services, which made it easier to provide a simple, search-engine experience when locating an address. While support for single-line geocoding was included with the REST and SOAP APIs, there remained some differences in functionality. For example, REST does not currently provide an operation that supports batching multiple address inputs in a single request. SOAP supports batching via the GeocodeAddresses operation, but it appears to only support multi-line addresses. In fact, batching multiple single-line address inputs is possible through a "hidden" feature. Simply associate the single-line text with the first address input field. For example, in the North American geocode service hosted by ArcGIS Online, the first address input field is named "Address". The GeocodeAddresses operation needs an address table and address input field mapping. The address input field mapping merely references the first address input field, in this example "Address". The address table includes a field that maps to "Address", and the field values contain the single-line address input text. Here's an example in .NET that uses the precompiled &lt;a href="http://help.arcgis.com/en/arcgisserver/10.0/apis/soap/Pre-generated_proxies.htm" target="_blank"&gt;ArcGIS SOAP library&lt;/a&gt; available with the ArcGIS SOAP SDK:&lt;br /&gt;&lt;br /&gt;&lt;iframe style="BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; WIDTH: 97.5%; HEIGHT: 68em; MARGIN-LEFT: 4px; OVERFLOW: hidden; BORDER-TOP: silver 1px solid; BORDER-RIGHT: silver 1px solid" src="http://www.drivehq.com/file/df.aspx/publish/rex_hansen/SampleCode/geocodeservice_singlelinebatch.htm" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Note that the suggested batch size of this service is 10, which will limit the number of inputs you can include in one request. And of course you'll want to peruse the terms of use. Links to information on the ArcGIS Server 10 geocode services hosted by ArcGIS Online are available below:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.arcgis.com/home/item.html?id=919dd045918c42458f30d2c85d566d68" target="_blank"&gt;North American Address Locator&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.arcgis.com/home/item.html?id=41e621023bed4304b2a78e9d8b5ce67d" target="'_blank"&gt;United States Street Locator&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3306209722829837644-5972582399848239656?l=rexdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rexdotnet.blogspot.com/feeds/5972582399848239656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3306209722829837644&amp;postID=5972582399848239656' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/5972582399848239656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/5972582399848239656'/><link rel='alternate' type='text/html' href='http://rexdotnet.blogspot.com/2011/07/single-line-batch-geocoding-with-arcgis.html' title='Single-line batch geocoding with ArcGIS Server 10 geocode services'/><author><name>rex hansen</name><uri>http://www.blogger.com/profile/17162176312798283112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_T5Js6sbq8JI/STJscHpuo0I/AAAAAAAAAAo/XqBIYxGy13E/S220/rexfaceclip.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3306209722829837644.post-6774150960572976022</id><published>2011-04-10T00:55:00.000-07:00</published><updated>2011-04-11T13:55:28.740-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='arcgis server'/><category scheme='http://www.blogger.com/atom/ns#' term='soap'/><category scheme='http://www.blogger.com/atom/ns#' term='soe'/><title type='text'>Get current user info in a Server Object Extension</title><content type='html'>Server Object Extensions (SOEs) give developers the ability to utilize the extensive geoanalytical capabilities of ArcObjects within an ArcGIS Server service. They also provide a framework that enables access to custom functionality in a service through the standard Web service protocols SOAP and REST. Enabling Web access to an SOE is well documented in the &lt;a href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#//0001000009st000000"&gt;ArcObjects SDK&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;ArcGIS Server Web services can also be &lt;a href="http://help.arcgis.com/en/arcgisserver/10.0/help/arcgis_server_dotnet_help/index.html#/Securing_Internet_connections_to_services/0093000000q4000000/"&gt;secured&lt;/a&gt; using token or Web server authentication methods. Since SOEs are can be enabled on a specific service, authentication rules configured on a service apply to all of its extensions, including custom SOEs. This poses the question: if an SOE is enabled on a secured Web service, can the authenticated user be retrieved within the SOE? Yes, in ArcGIS Server 10 this is possible. &lt;br /&gt;&lt;br /&gt;Use the C# code provided below as an example. Basically, within your SOE code get the current server environment and cast to IServerEnvironment2 to gain access to UserInfo. If authentication is enabled for ArcGIS Server Web services, each request to a service will be associated with an authenticated user. UserInfo will contain the user name and roles within which that user is present for the current request. Note, when Web server authentication is based on Windows users and groups, the user name is in the format &lt;em&gt;domain\user&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt; &lt;iframe style="BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; WIDTH: 97.5%; HEIGHT: 25em; MARGIN-LEFT: 4px; OVERFLOW: hidden; BORDER-TOP: silver 1px solid; BORDER-RIGHT: silver 1px solid" src="http://www.drivehq.com/file/df.aspx/publish/rex_hansen/SampleCode/UserInfoSOE.htm" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately, REST SOE's hosted on ArcGIS Server for .NET require ArcGIS Server 10 service pack 2 for this to function. ArcGIS Server 10 service pack 2 will be available for download on the &lt;a href="http://resources.arcgis.com/content/patches-and-service-packs?fa=listPatches&amp;amp;PID=107"&gt;ArcGIS Resource Center&lt;/a&gt; soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3306209722829837644-6774150960572976022?l=rexdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rexdotnet.blogspot.com/feeds/6774150960572976022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3306209722829837644&amp;postID=6774150960572976022' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/6774150960572976022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/6774150960572976022'/><link rel='alternate' type='text/html' href='http://rexdotnet.blogspot.com/2011/04/get-current-user-info-within-server.html' title='Get current user info in a Server Object Extension'/><author><name>rex hansen</name><uri>http://www.blogger.com/profile/17162176312798283112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_T5Js6sbq8JI/STJscHpuo0I/AAAAAAAAAAo/XqBIYxGy13E/S220/rexfaceclip.PNG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3306209722829837644.post-4795944366540841346</id><published>2010-09-14T00:29:00.000-07:00</published><updated>2010-09-23T23:07:03.120-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maps'/><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='windows phone'/><title type='text'>Using Google Maps with ArcGIS Silverlight</title><content type='html'>The &lt;a href="http://help.arcgis.com/en/webapi/silverlight"&gt;ArcGIS API for Microsoft Silverlight/WPF &lt;/a&gt;(and &lt;a href="http://help.arcgis.com/en/arcgismobile/10.0/apis/WindowsPhone/"&gt;Windows Phone&lt;/a&gt;) includes an extensible framework for adding geographic data from a variety of sources. The core library (ESRI.ArcGIS.Client) contains the base classes for the framework and the implementation for the primary source of data, ArcGIS Server. In the initial version of the API, the framework was utilized to support the use of Bing Maps imagery. In version 2.0, the framework was leveraged to support other data sources, such as OpenStreetMap, WMS, and GeoRSS in the toolkit data sources assembly (ESRI.ArcGIS.Client.Toolkit.DataSources.dll) . You'll notice Google is missing from that list of data sources. This brings up a question, and the purpose for this blog post:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Can you use Google Maps imagery in an ArcGIS Silverlight/WPF/Windows Phone application?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There are two answers; one technical, one legal. First, technically it can be done. The Web Mercator projection and the tiling scheme used by Google map and image tiles is virtually the same as Bing, new ArcGIS Online services, and OpenStreetMap. The URL format to access Google tiles directly can be discovered. For example, you can use &lt;a href="http://www.fiddler2.com/fiddler2/"&gt;Fiddler&lt;/a&gt; to view requests from a legitimate Google Maps application.   Some folks even discuss the URL format and structure (e.g. &lt;a href="http://www.codeproject.com/KB/scrapbook/googlemap.aspx"&gt;Code Project&lt;/a&gt;). &lt;br /&gt;&lt;br /&gt;Now for the legal answer.  In short, no.  You cannot access Google Maps imagery outside of an interface (read: APIs) provided by Google. This is mentioned in an online &lt;a href="http://code.google.com/apis/maps/faq.html#tos_tiles"&gt;FAQ&lt;/a&gt; which references an item in the &lt;a href="http://www.google.com/accounts/TOS"&gt;terms of service&lt;/a&gt;. The last statement in the terms of service appears to suggest that direct access to map tiles outside of an API is possible via an explicit agreement. In an email conversation with Thor Mitchell, Product Manager for the Google Maps API, he clarified these terms by stating that such agreements are rare and "they are generally limited to embedded device partnerships such as in-car navigation systems and in-flight entertainment systems."  Thor also reminded me that the URL format to access Google tiles is an undocumented interface, so it can change at any time.   And Google maintains a team that identifies and contacts application developers that use Google tiles (and services) in an unsupported way.   If you try, you will likely be asked to stop, followed by more punitive measures if ignored.  &lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;So why doesn't Google allow direct access to map tiles? &lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are a number of reasons. According to Google, enabling direct access prevents them from meeting their financial obligations to companies from which they license data. Also, there has been no compelling business justification given the risk of abuse. If you'd like to comment on the prospect of direct access to Google map tiles, Google's own Pamela Fox has published an &lt;a href="http://code.google.com/p/gmaps-api-issues/issues/detail?id=1396"&gt;issue&lt;/a&gt; on the topic. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;So how do you legally use Google Maps data within an ArcGIS Silverlight application? &lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You'll need to use the &lt;a href="http://code.google.com/apis/maps/documentation/staticmaps/"&gt;Google Static Maps API&lt;/a&gt;. Essentially it generates snapshots of Google map tiles at an extent, image size, and scale level that matches the Google Maps tiling scheme. You can think of it as sort of a dynamic tiled layer.&lt;br /&gt;&lt;br /&gt;Since the custom layer will generate dynamic map images from a service, it can extend the DynamicMapServiceLayer class in the ArcGIS Silverlight API. You can override the Initialize method to set a few key properties, such as the full extent and spatial reference, but you'll also want to define the tiling scheme that matches Google Maps and will be used to define the scale level at which a dynamic image will be generated. These levels of detail (lods) will be used to determine the output size of the map image generated by the Static Maps API. The primary method to override in this case is GetUrl() which provides access to the map extent, pixel width and height, and a delegate to call when URL construction is complete and a request for a new map image should be generated. At runtime, each extent change in the Map control calls GetUrl() to generate a new map image. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The URL to generate a Google Static Map requires a center point in geographic coordinates, a scale level, and the image size in pixels. The Static Maps API does not support projection on the fly, so the spatial reference will always be Web Mercator. This means the spatial reference of the ArcGIS Silverlight Map control must also be set to Web Mercator. So the GetUrl() method in the custom layer is provided a map extent in Web Mercator. Fortunately the ArcGIS Silverlight API includes a client-side static class, ESRI.ArcGIS.Client.Projection.WebMercator, which can be used to tranform geometry between Web Mercator and Geographic (WGS84) coordinate systems. This can be used to tranform the center point from Web Mercator to geographic coordinates. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The appropriate scale level is determined by matching the resolution (map units per pixel) of the Map with the level of detail in the Google Maps tiling scheme. If they match, the image size passed to the GetUrl() method does not need to change. If they do not match then the image size must be modified to account for the discrepancy.  Unfortunately with the Static Maps API the image size is limited to 640x640 pixels.  So while the layer will work in between scale levels, you will be able to generate larger images (up to 640 pixels on a side) more reliably if you snap to levels of the Google Maps tiling scheme. Since you cannot associate a tiling scheme with a Map control outside of adding a tiled layer, you must first add a "dummy" tiled layer with the same levels of detail used by Google Maps. The sample download below contains one such layer, MercatorSchemaTiledLayer. Be sure to set the dummy layer's visibility to false (since you'll be using the Static Map API to generate your basemap) and set the SkipToLevels property on the Map control to true.&lt;/div&gt;&lt;br /&gt;&lt;iframe style="BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; WIDTH: 97.5%; HEIGHT: 90em; MARGIN-LEFT: 4px; OVERFLOW: hidden; BORDER-TOP: silver 1px solid; BORDER-RIGHT: silver 1px solid" src="http://www.drivehq.com/file/df.aspx/publish/rex_hansen/SampleCode/GoogleStaticMapLayer.cs.htm" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The screen shot below shows the Google Static Maps API in action. A Static Map is used as a basemap for an ArcGIS Server dynamic map service. Note the Google logo and copyright text at the bottom of the map.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_T5Js6sbq8JI/TI8pFTy9XXI/AAAAAAAAADY/R-xSYK3QNoI/s1600/googleblogimage.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 282px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5516673239742242162" border="0" alt="" src="http://4.bp.blogspot.com/_T5Js6sbq8JI/TI8pFTy9XXI/AAAAAAAAADY/R-xSYK3QNoI/s400/googleblogimage.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are a few legal implications to keep in mind when using the Static Maps API: &lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;The application must run in a Web browser (see &lt;a href="http://code.google.com/apis/maps/terms.html#section_10_8"&gt;10.8&lt;/a&gt;). This means you cannot use it in a WPF, Silverlight out-of-browser, or Windows Phone application. &lt;/li&gt;&lt;li&gt;All branding and attribution must remain visible at all times, and can not be obscured by overlays or UI elements in any way (see &lt;a href="http://code.google.com/apis/maps/terms.html#section_7_4_b"&gt;7.4d&lt;/a&gt;). Although the Google copyright text and ESRI logo are close in an ArcGIS Silverlight application, you can still see\read the Google copyright details.&lt;/li&gt;&lt;li&gt;The application should not attempt to stitch multiple static map images together to display a map that is larger than permitted in the Maps APIs Documentation (see &lt;a href="http://code.google.com/apis/maps/terms.html#section_10_2"&gt;10.2&lt;/a&gt;). Basically you can't generate a bunch of dynamic images and stitch them together on the client for map sizes greater than 640 pixels on a side. Even if you could legally, you'll get a Google stamp on each image, which might show up in the middle of your map - it could get messy.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;a href="http://www.drivehq.com/file/df.aspx/publish/rex_hansen/SampleCode/CustomLayers.zip"&gt;Download the sample solution&lt;/a&gt;&lt;/strong&gt;&lt;a href="http://www.drivehq.com/file/df.aspx/publish/rex_hansen/SampleCode/CustomLayers.zip"&gt; &lt;/a&gt;to see how to work with the Google Maps Static API in ArcGIS Silverlight.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Special thanks to Thor Mitchell, Product Manager for the Google Maps API, for providing detailed information on the legal use of Google Maps data and APIs.&lt;/div&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/3306209722829837644-4795944366540841346?l=rexdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/4795944366540841346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/4795944366540841346'/><link rel='alternate' type='text/html' href='http://rexdotnet.blogspot.com/2010/09/use-google-maps-with-arcgis-silverlight.html' title='Using Google Maps with ArcGIS Silverlight'/><author><name>rex hansen</name><uri>http://www.blogger.com/profile/17162176312798283112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_T5Js6sbq8JI/STJscHpuo0I/AAAAAAAAAAo/XqBIYxGy13E/S220/rexfaceclip.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_T5Js6sbq8JI/TI8pFTy9XXI/AAAAAAAAADY/R-xSYK3QNoI/s72-c/googleblogimage.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3306209722829837644.post-5008625242094883326</id><published>2010-04-30T22:42:00.000-07:00</published><updated>2010-06-15T00:48:08.413-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql server spatial'/><category scheme='http://www.blogger.com/atom/ns#' term='azure'/><category scheme='http://www.blogger.com/atom/ns#' term='esri'/><category scheme='http://www.blogger.com/atom/ns#' term='mapit'/><title type='text'>Using the SQL Server Spatial library in Windows Azure</title><content type='html'>Microsoft recently &lt;a href="http://blogs.msdn.com/edkatibah/archive/2010/03/21/spatial-data-support-coming-to-sql-azure.aspx"&gt;announced&lt;/a&gt; that SQL Azure will support working with native spatial data in June of this year. This is great news, and significantly enhances the usability of SQL Azure as a geographic data respository. As a result, many folks may want to start utilizing spatial data in their Azure hosted Web applications. Working with SQL Server spatial data in a .NET application usually involves working with the SQL Server Spatial (SqlServerSpatial.dll) and Types (Microsoft.SqlServer.Types.dll) libraries included with the SQL Server System CLR Types feature pack. The technical capabilities of the SQL Server Spatial library have been established in numerous &lt;a href="http://blogs.msdn.com/edkatibah/"&gt;blog posts&lt;/a&gt;, &lt;a href="http://microsoftpdc.com/Sessions/SVR33"&gt;conference sessions&lt;/a&gt;, &lt;a href="http://social.msdn.microsoft.com/Forums/en/sqlspatial/threads"&gt;forums&lt;/a&gt;, and in the &lt;a href="http://msdn.microsoft.com/en-us/library/bb933876.aspx"&gt;product documentation&lt;/a&gt;. Basically the library offers a standard, light-weight set of spatial operators built on geometry and geography spatial data types that are relatively easy to use and integrate in a .NET application. You can download, install, use, and distribute these libraries as needed. The latest edition of the SQL CLR Types was released in &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=020EE0D5-BCE4-4A45-9D64-B0C49C8831E5&amp;amp;displaylang=en"&gt;November 2009 for SQL Server 2008 R2&lt;/a&gt;. If the .NET application that uses the SQL spatial libraries is installed on a local machine or hosted on a local server, you have complete control over the environment in which it operates. However, if you choose to deploy an ASP.NET application as a Windows Azure web service, you will encounter a limitation. The platform for Windows Azure is a flavor of 64-bit Windows Server 2008 prior to the R2 release. The Nov 2009 SQL Spatial library is dependent on the system library MSVCRT80.dll which is not included with this operating system. As a result, when you attempt to use the SQL Spatial library in your Azure hosted ASP.NET web service, you'll likely see the following error:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;Unable to load DLL 'SqlServerSpatial.dll': The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log for more detail. (Exception from HRESULT: 0x800736B1)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;MSVCR80.dll is required by the SQL Spatial library and must be installed/configured on the host operation system, it cannot simply be dropped in the same directory. In addition, you cannot install features and components in your Windows Azure workspace. So how can you use the SQL Spatial library in an Azure hosted application? Simple, include a SQL Spatial library from a SQL Server 2008 (not R2) edition of the CLR Types. The functionality is basically unchanged.&lt;br /&gt;&lt;br /&gt;Here are the steps:&lt;br /&gt;&lt;br /&gt;1) Download the 64-bit SQL Server 2008 edition of the SQL Server CLR Types feature pack. I used the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=228DE03F-3B5A-428A-923F-58A033D316E1&amp;amp;displaylang=en"&gt;October 2008 download&lt;/a&gt; successfully.&lt;br /&gt;&lt;br /&gt;2) If you don't want to install the feature pack, or you don’t have a 64-bit system on which to install, you can extract the 64-bit version of this library using the following command:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#333333;"&gt;msiexec /a SQLSysClrTypes_64bit.msi /qb TARGETDIR="C:\MyFolder"&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;3) Copy the Microsoft.SqlServer.Types.dll and SqlServerSpatial.dll into the bin of your Web application. I was able to successfully deploy and use SQL Server Spatial logic in Windows Azure service using the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=dba6a576-468d-4ef6-877e-b14e3c865d3a&amp;amp;displaylang=en"&gt;February 2010 edition of the Azure SDK&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now let's change gears and chat about ESRI's foray into the SQL Server Spatial and Azure world. Currently ESRI has a product named &lt;a href="http://www.esri.com/mapit"&gt;MapIt&lt;/a&gt; which includes an ASP.NET Web service, the Spatial Data Service, that uses the SQL Server Spatial library to work with native spatial data in SQL Server 2008. The Spatial Data Service can be deployed as a Windows Azure service and work with spatial data in SQL Azure or any third party that hosts spatial data in SQL Server 2008 (e.g. &lt;a href="http://www.discountasp.net/"&gt;Discount ASP.NET&lt;/a&gt;). You can see the SDS in Windows Azure in action here: &lt;a href="http://mapit.cloudapp.net/"&gt;http://mapit.cloudapp.net/&lt;/a&gt;. To deploy your own SDS as a Windows Azure service, use the &lt;a href="http://resources.esri.com/mapit/index.cfm?fa=downloads.register&amp;amp;FileName=ESRIMapIt_SDS_Azure_Deployment_Utility__v1.1.zip"&gt;Azure deployment utility on the MapIt resource center&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As a parting thought, keep in mind that Microsoft will likely update the Windows Azure platform to include the foundational libraries necessary to support the SQL Server 2008 R2 edition of the spatial library. Hopefully the information in this post will suffice until that time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3306209722829837644-5008625242094883326?l=rexdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/5008625242094883326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/5008625242094883326'/><link rel='alternate' type='text/html' href='http://rexdotnet.blogspot.com/2010/04/using-sql-server-spatial-library-in.html' title='Using the SQL Server Spatial library in Windows Azure'/><author><name>rex hansen</name><uri>http://www.blogger.com/profile/17162176312798283112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_T5Js6sbq8JI/STJscHpuo0I/AAAAAAAAAAo/XqBIYxGy13E/S220/rexfaceclip.PNG'/></author></entry><entry><id>tag:blogger.com,1999:blog-3306209722829837644.post-5552962574407355493</id><published>2010-04-05T01:30:00.000-07:00</published><updated>2010-04-30T22:44:33.399-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='arcgis server'/><category scheme='http://www.blogger.com/atom/ns#' term='image services'/><title type='text'>Dev Summit 2010, Image Services, and Silverlight</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_T5Js6sbq8JI/S9u5zBs5cnI/AAAAAAAAACc/CmkJDe7pD_g/s1600/dsplenary2010.jpg"&gt;&lt;img style="MARGIN: 0px 0px 10px 10px; WIDTH: 320px; FLOAT: right; HEIGHT: 157px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5466166859025445490" border="0" alt="" src="http://3.bp.blogspot.com/_T5Js6sbq8JI/S9u5zBs5cnI/AAAAAAAAACc/CmkJDe7pD_g/s320/dsplenary2010.jpg" /&gt;&lt;/a&gt; &lt;div&gt;About a week before the &lt;a href="http://www.esri.com/events/devsummit/index.html"&gt;Dev Summit&lt;/a&gt; I was tasked with showcasing &lt;span id="SPELLING_ERROR_0" class="blsp-spelling-error"&gt;ArcGIS&lt;/span&gt; Server 10 image services in the plenary using &lt;span id="SPELLING_ERROR_1" class="blsp-spelling-error"&gt;Silverlight&lt;/span&gt; as the platform. The tricky part was limiting the temptation to “light it up” with &lt;span id="SPELLING_ERROR_2" class="blsp-spelling-error"&gt;Silverlight&lt;/span&gt; so as not to overshadow image services. And there was another problem - the last time I did anything related to image processing my cell phone was the size of an army field radio, Netscape was the browser &lt;span id="SPELLING_ERROR_3" class="blsp-spelling-error"&gt;du&lt;/span&gt; &lt;span id="SPELLING_ERROR_4" class="blsp-spelling-error"&gt;jour&lt;/span&gt;, and Enron was a hot stock buy. So I had to ramp up on image services quickly… which meant spending some quality time with the raster gurus at the factory (&lt;span id="SPELLING_ERROR_5" class="blsp-spelling-error"&gt;ESRI&lt;/span&gt;). Along the way, I gathered some valuable info and thought it might be interesting to relay a few pivotal gems on the use of image services and &lt;span id="SPELLING_ERROR_6" class="blsp-spelling-error"&gt;Silverlight&lt;/span&gt; in &lt;span id="SPELLING_ERROR_7" class="blsp-spelling-error"&gt;ArcGIS&lt;/span&gt; 10.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span id="SPELLING_ERROR_8" class="blsp-spelling-error"&gt;ArcGIS&lt;/span&gt; 10 supports a new &lt;span id="SPELLING_ERROR_9" class="blsp-spelling-error"&gt;geodatabase&lt;/span&gt; model, the mosaic &lt;span id="SPELLING_ERROR_10" class="blsp-spelling-error"&gt;dataset&lt;/span&gt;, which can easily and effectively manage small and large collections of imagery. They are created and maintained in &lt;span id="SPELLING_ERROR_11" class="blsp-spelling-error"&gt;ArcMap&lt;/span&gt; or &lt;span id="SPELLING_ERROR_12" class="blsp-spelling-error"&gt;ArcCatalog&lt;/span&gt; and you use a set of GP tools to manage. Mosaic &lt;span id="SPELLING_ERROR_13" class="blsp-spelling-error"&gt;datasets&lt;/span&gt; support imagery from multiple sensor platforms including &lt;span id="SPELLING_ERROR_14" class="blsp-spelling-error"&gt;QuickBird&lt;/span&gt;, &lt;span id="SPELLING_ERROR_15" class="blsp-spelling-error"&gt;IKONOS&lt;/span&gt;, and &lt;span id="SPELLING_ERROR_16" class="blsp-spelling-error"&gt;WorldView&lt;/span&gt;. Most importantly, there is no &lt;span id="SPELLING_ERROR_17" class="blsp-spelling-error"&gt;preprocessing&lt;/span&gt; required. &lt;span id="SPELLING_ERROR_18" class="blsp-spelling-error"&gt;Mosaicking&lt;/span&gt;, &lt;a href="http://en.wikipedia.org/wiki/Pansharpened_image"&gt;&lt;span id="SPELLING_ERROR_19" class="blsp-spelling-error"&gt;pansharpening&lt;/span&gt;&lt;/a&gt;, and &lt;span id="SPELLING_ERROR_20" class="blsp-spelling-error"&gt;ortho&lt;/span&gt;-rectification happen on the fly. Merely add the image to the mosaic &lt;span id="SPELLING_ERROR_21" class="blsp-spelling-error"&gt;dataset&lt;/span&gt; and it assimilates.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Mosaic &lt;span id="SPELLING_ERROR_22" class="blsp-spelling-error"&gt;datasets&lt;/span&gt; support time awareness. Image services are time aware if the underlying mosaic &lt;span id="SPELLING_ERROR_23" class="blsp-spelling-error"&gt;dataset&lt;/span&gt; has been time enabled. You enable time awareness in the mosaic &lt;span id="SPELLING_ERROR_24" class="blsp-spelling-error"&gt;dataset&lt;/span&gt; properties, not the layer properties (as with feature layers in a map service).&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Sometimes &lt;span id="SPELLING_ERROR_25" class="blsp-spelling-error"&gt;rasters&lt;/span&gt; in a mosaic &lt;span id="SPELLING_ERROR_26" class="blsp-spelling-error"&gt;dataset&lt;/span&gt; will not display at full or larger extents. In this case, overviews must be generated. Overviews are similar to pyramid layers in that they allow for the quick display of very large collections of imagery. Overviews do this by &lt;span id="SPELLING_ERROR_27" class="blsp-spelling-error"&gt;resampling&lt;/span&gt; source data to generate "snapshot" images for larger map resolutions (larger extents). In most cases, you will want to generate overviews. However, this poses a problem when you want to display a set of &lt;span id="SPELLING_ERROR_28" class="blsp-spelling-error"&gt;rasters&lt;/span&gt; that occupy the same space in a time series. Overviews are generated for a specific map resolution (map units/pixel) ranges, not a specific instant or span of time. Therefore if you're viewing your image service at a map resolution that uses an overview, the overview will only show one instant of time regardless of the time extent you specify. In this situation, avoid generating overviews and increase the maximum cell size range factor to enable the display of primary &lt;span id="SPELLING_ERROR_29" class="blsp-spelling-error"&gt;rasters&lt;/span&gt; at larger map resolutions. To do this, use the Calculate Cell Size Ranges option from the mosaic &lt;span id="SPELLING_ERROR_30" class="blsp-spelling-error"&gt;dataset&lt;/span&gt; context menu in &lt;span id="SPELLING_ERROR_31" class="blsp-spelling-error"&gt;ArcCatalog&lt;/span&gt;/&lt;span id="SPELLING_ERROR_32" class="blsp-spelling-error"&gt;ArcMap&lt;/span&gt; or use the &lt;span id="SPELLING_ERROR_33" class="blsp-spelling-error"&gt;geoprocessing&lt;/span&gt; tool of the same name. Increase the range factor to increase the threshold at which overviews are used, if available.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;9.3.1 Image Server &lt;span id="SPELLING_ERROR_34" class="blsp-spelling-corrected"&gt;functionality&lt;/span&gt; is now part of core &lt;span id="SPELLING_ERROR_35" class="blsp-spelling-error"&gt;ArcGIS&lt;/span&gt; Server 10.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;All &lt;span id="SPELLING_ERROR_36" class="blsp-spelling-error"&gt;rasters&lt;/span&gt;, including mosaic &lt;span id="SPELLING_ERROR_37" class="blsp-spelling-error"&gt;datasets&lt;/span&gt;, can be published as image services. An individual image on disk is termed a "raster &lt;span id="SPELLING_ERROR_38" class="blsp-spelling-error"&gt;dataset&lt;/span&gt;" or "raster layer".&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Image services include an enhanced export image operation and three new operations: query, identify, and download. Each are covered in detail below.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The export image operation has a new &lt;span id="SPELLING_ERROR_39" class="blsp-spelling-error"&gt;JPGPNG&lt;/span&gt; image format which lets the image service define the ideal output format. If the extent requested contains transparent portions, generate a &lt;span id="SPELLING_ERROR_40" class="blsp-spelling-error"&gt;png&lt;/span&gt;. If not, generate a &lt;span id="SPELLING_ERROR_41" class="blsp-spelling-error"&gt;jpg&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The export image operation uses mosaic rules to order, filter, and select tiles displayed in the &lt;span id="SPELLING_ERROR_42" class="blsp-spelling-error"&gt;mosaicked&lt;/span&gt; image. For example, if a service hosts a set of overlapping images you can define which ones are displayed over others based on an attribute such as date, or a point of interest. The &lt;a href="http://links.esri.com/help/rest"&gt;REST &lt;span id="SPELLING_ERROR_43" class="blsp-spelling-error"&gt;API&lt;/span&gt; documentation&lt;/a&gt; provides minimal insight into parameter descriptions. The &lt;a href="http://links.esri.com/help/soap"&gt;SOAP &lt;span id="SPELLING_ERROR_44" class="blsp-spelling-error"&gt;API&lt;/span&gt; documentation &lt;/a&gt;may provide more information (it definitely will in &lt;span id="SPELLING_ERROR_45" class="blsp-spelling-error"&gt;ArcGIS&lt;/span&gt; Server 10 final). Also note, the identify operation uses mosaic rules to order and filter &lt;span id="SPELLING_ERROR_46" class="blsp-spelling-error"&gt;rasters&lt;/span&gt; to modify results.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The export image operation provides rendering rules to dynamically change the display of raster data using a set of predefined raster functions. For example, you can apply a custom aspect, slope, color map or shaded relief on the fly. Only 8 raster functions are available with the &lt;a href="http://help.esri.com/EN/arcgisserver/10.0/apis/rest/israsterfunctions.html"&gt;&lt;span id="SPELLING_ERROR_47" class="blsp-spelling-error"&gt;ArcGIS&lt;/span&gt; Server 10 REST &lt;span id="SPELLING_ERROR_48" class="blsp-spelling-error"&gt;API&lt;/span&gt;&lt;/a&gt;. One item you may notice in a rendering rule is the &lt;span id="SPELLING_ERROR_49" class="blsp-spelling-error"&gt;variableName&lt;/span&gt; attribute. It must be set to the value defined in the REST &lt;span id="SPELLING_ERROR_50" class="blsp-spelling-error"&gt;API&lt;/span&gt; doc, either “DEM” or “Raster”. It represents a property defined in &lt;span id="SPELLING_ERROR_51" class="blsp-spelling-error"&gt;ArcObjects&lt;/span&gt; where values may include “Raster2” or a user defined name for a function chain. These other values are not exposed in the REST &lt;span id="SPELLING_ERROR_52" class="blsp-spelling-error"&gt;API&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The query operation enables clients to define an attribute and/or spatial query and return information about &lt;span id="SPELLING_ERROR_53" class="blsp-spelling-error"&gt;rasters&lt;/span&gt; in a &lt;span id="SPELLING_ERROR_54" class="blsp-spelling-error"&gt;dataset&lt;/span&gt; hosted by an image service. You can also use it to return raster footprints or a raster thumbnail.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The identify operation enables clients to return a pixel value for &lt;span id="SPELLING_ERROR_55" class="blsp-spelling-error"&gt;rasters&lt;/span&gt; hosted in an image service given a user-defined location. The location can be a point or polygon. If a polygon, the centroid of the polygon is used. The order of &lt;span id="SPELLING_ERROR_56" class="blsp-spelling-error"&gt;rasters&lt;/span&gt; during the operation can be defined by a mosaic rule. Unlike the identify operation on a map service, image services do not provide a tolerance since only one pixel value per raster can be returned. Do not let the pixel size parameter fool you; it defines a pixel resolution to use when identifying pixel values. This means you can identify on overviews available in the mosaic &lt;span id="SPELLING_ERROR_57" class="blsp-spelling-error"&gt;dataset&lt;/span&gt;, and return an interpolated value in an overview image. Interpolation occurs when the overview is generated by &lt;span id="SPELLING_ERROR_58" class="blsp-spelling-error"&gt;resampling&lt;/span&gt; source &lt;span id="SPELLING_ERROR_59" class="blsp-spelling-error"&gt;rasters&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The download operation basically enables clients to download individual &lt;span id="SPELLING_ERROR_60" class="blsp-spelling-error"&gt;rasters&lt;/span&gt; and &lt;span id="SPELLING_ERROR_61" class="blsp-spelling-error"&gt;metadata&lt;/span&gt; hosted by an image service. You can also clip imagery on the server before download and define the download image format. If you don't want users to download individual &lt;span id="SPELLING_ERROR_62" class="blsp-spelling-error"&gt;rasters&lt;/span&gt;, you can easily disable this capability of the service. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;So what does this mean for the &lt;span id="SPELLING_ERROR_63" class="blsp-spelling-error"&gt;ArcGIS&lt;/span&gt; &lt;span id="SPELLING_ERROR_64" class="blsp-spelling-error"&gt;API&lt;/span&gt; for Microsoft &lt;span id="SPELLING_ERROR_65" class="blsp-spelling-error"&gt;Silverlight&lt;/span&gt;/&lt;span id="SPELLING_ERROR_66" class="blsp-spelling-error"&gt;WPF&lt;/span&gt;? To put it simply, the &lt;span id="SPELLING_ERROR_67" class="blsp-spelling-error"&gt;ArcGISImageServiceLayer&lt;/span&gt; has been updated to support working with &lt;span id="SPELLING_ERROR_68" class="blsp-spelling-error"&gt;ArcGIS&lt;/span&gt; Server 10 image services. A set of new classes will be included to support mosaic and rendering rules. The &lt;span id="SPELLING_ERROR_69" class="blsp-spelling-error"&gt;QueryTask&lt;/span&gt; can be used with the image service Query operation. The Identify operation will require a new task, and the Download operation may be supported in the near future. 2.0 public beta will be released in April and you'll get a chance to try out some of this new functionality. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Also, at some point in the near future a set of &lt;span id="SPELLING_ERROR_70" class="blsp-spelling-error"&gt;ArcGIS&lt;/span&gt; Server 10 image services will be hosted online by &lt;span id="SPELLING_ERROR_71" class="blsp-spelling-error"&gt;ESRI&lt;/span&gt; to demonstrate their functionality. They may or may not be officially announced. In any case, I’ll tweet when they’re up, running, and public (@rex_hansen).&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3306209722829837644-5552962574407355493?l=rexdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rexdotnet.blogspot.com/feeds/5552962574407355493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3306209722829837644&amp;postID=5552962574407355493' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/5552962574407355493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/5552962574407355493'/><link rel='alternate' type='text/html' href='http://rexdotnet.blogspot.com/2010/03/dev-summit-2010-image-services-and.html' title='Dev Summit 2010, Image Services, and Silverlight'/><author><name>rex hansen</name><uri>http://www.blogger.com/profile/17162176312798283112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_T5Js6sbq8JI/STJscHpuo0I/AAAAAAAAAAo/XqBIYxGy13E/S220/rexfaceclip.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_T5Js6sbq8JI/S9u5zBs5cnI/AAAAAAAAACc/CmkJDe7pD_g/s72-c/dsplenary2010.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3306209722829837644.post-4849180525636207222</id><published>2009-12-06T03:01:00.000-08:00</published><updated>2010-08-06T05:00:41.072-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='arcgis server'/><category scheme='http://www.blogger.com/atom/ns#' term='lithuania'/><category scheme='http://www.blogger.com/atom/ns#' term='euc'/><category scheme='http://www.blogger.com/atom/ns#' term='cache'/><category scheme='http://www.blogger.com/atom/ns#' term='mashup'/><category scheme='http://www.blogger.com/atom/ns#' term='mapit'/><title type='text'>ESRI's European User Conference 2009 - Asides and Slides</title><content type='html'>&lt;iframe style="WIDTH: 400px; HEIGHT: 400px;float:right;margin-left:15px;" src="http://www.drivehq.com/file/df.aspx/publish/rex_hansen/SlideShows/Lithuania.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;br /&gt;In October 2009 &lt;a href="http://www.hnit-baltic.lt/"&gt;HNIT-Baltic&lt;/a&gt; hosted ESRI's European Users Conference in Vilnius, Lithuania.  I attended as an ambassador for ArcGIS Server, its Web APIs, and MapIt.  This was my first foray into eastern Europe, and it turned out quite simply fantastic.  Discussions with users and partners were spirited and exciting, and attendees in my sessions were engaged. The folks I met that work at HNIT-Baltic were exceptionally knowledgable and courteous, and simply ready for the next challenge.     &lt;br /&gt;&lt;br /&gt;The city itself was inviting, fresh, and personal.  And I discovered a few things during my adventure: Lithuanians enjoy pizza with ketchup, because I was told it "adds flavor"; shopping malls look like factories on the outside, but they rival the best of So Cal on the inside, with better prices; and if you see a glass of water on a table at a party... it's probably vodka.  &lt;br /&gt;&lt;br /&gt;I've included a montage of a few photos I snapped with my trusty iPhone while in Vilnius (press "P" to pause).  &lt;br /&gt;&lt;br /&gt;If you attended the EUC in Vilnius or just want to view the conference materials, you can view and download the plenary and paper session materials from &lt;a href="http://www.hnit-baltic.lt/DesktopDefault.aspx?tabID=3973&amp;alias=hnit-baltic&amp;lang=en-US"&gt;HNIT-Baltic&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;To peruse the technical sessions I presented, I've made PDF versions of the session slides available below:&lt;br /&gt;&lt;a href="http://www.drivehq.com/file/df.aspx/publish/rex_hansen/SampleCode/EUC09/Building Mashups with ArcGIS Server.pdf" target="_blank"&gt;Building Mashups with ArcGIS Server&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.drivehq.com/file/df.aspx/publish/rex_hansen/SampleCode/EUC09/Building Great Web Map Applications.pdf" target="_blank"&gt;Building Great Web Map Applications&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.drivehq.com/file/df.aspx/publish/rex_hansen/SampleCode/EUC09/Whats New in ArcGIS Server 9.3.1.pdf" target="_blank"&gt;Whats New in ArcGIS Server 9.3.1&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3306209722829837644-4849180525636207222?l=rexdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/4849180525636207222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/4849180525636207222'/><link rel='alternate' type='text/html' href='http://rexdotnet.blogspot.com/2009/12/esris-european-user-conference-2009.html' title='ESRI&apos;s European User Conference 2009 - Asides and Slides'/><author><name>rex hansen</name><uri>http://www.blogger.com/profile/17162176312798283112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_T5Js6sbq8JI/STJscHpuo0I/AAAAAAAAAAo/XqBIYxGy13E/S220/rexfaceclip.PNG'/></author></entry><entry><id>tag:blogger.com,1999:blog-3306209722829837644.post-5196294018522698992</id><published>2009-11-01T01:33:00.000-07:00</published><updated>2010-09-14T00:56:51.690-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='arcgis online'/><category scheme='http://www.blogger.com/atom/ns#' term='arcgis server'/><title type='text'>Using the ArcGIS Server REST API in .NET applications</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Over the past year I've handled a number of questions regarding the use the ArcGIS Server REST API in a .NET application. It can be done quite effectively, but isn't explicitly promoted by ESRI since the REST API is primarily designed to be consumed by pre-packaged Web clients like the ArcGIS JavaScript, Flex, and Silverlight/WPF APIs. However, using REST programmatically in a .NET application context without installing an ESRI product can make for some powerful and focused yet lightweight solutions. In addition, if you need to do something relatively simple you don't have to generate a load of client-side proxy classes like you do with SOAP.&lt;br /&gt;&lt;br /&gt;I've included a simple code example below to highlight how easy it is to integrate ArcGIS Server services via REST in your .NET app. The example uses an ArcGIS Online geocode service to geocode an address and return a location.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Download the sample &lt;/strong&gt;&lt;a href="ftp://ftp.drivehq.com/rex_hansen/samplecode/restdemo.zip"&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;iframe style="BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; WIDTH: 97.5%; HEIGHT: 54em; MARGIN-LEFT: 4px; OVERFLOW: hidden; BORDER-TOP: silver 1px solid; BORDER-RIGHT: silver 1px solid" src="http://www.drivehq.com/file/df.aspx/publish/rex_hansen/SampleCode/AGSREST.cs.html" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;There are a few items to consider when using ArcGIS services via REST in .NET: &lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:verdana;"&gt;&lt;ol&gt;&lt;li&gt;You will construct the url that will execute an operation on the server. Inputs to the operation are included in the url as parameters with values. Add a reference to the System.Web.dll and use the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.httputility.aspx"&gt;HttpUtility&lt;/a&gt; class to encode parameter values in the url.&lt;/li&gt;&lt;li&gt;In most cases you will return results in &lt;a href="http://json.org/"&gt;JSON (JavaScript Object Notation)&lt;/a&gt; format. Add a reference to the System.Web.Extensions.dll (included with .NET 3.5, &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=ca9d90fa-e8c9-42e3-aa19-08e2c027f5d6&amp;amp;displaylang=en"&gt;separate install for .NET 2.0&lt;/a&gt;) and use the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx"&gt;JavaScriptSerializer&lt;/a&gt; class to deserialize JSON results into a dictionary you can use more effectively.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;This example can easily be modified for use in a .NET CLR trigger for SQL Server to geocode address information upon entry into a table -or- in a batch process to geocode addresses in a database -or- show a location in a WinForm or WPF desktop client. The same idea can cross over into other ArcGIS Server services such as querying layers in a map or executing a geoprocessing service. In any case, you'll find the simplicity of the REST API refreshingly simple for those scenarios where you need to plug a little GIS into your app. One parting note, if you use ArcGIS Online services via REST, you'll need to follow the &lt;a href="http://www.esri.com/software/arcgis/arcgisonline/arcgis_online_pricing_sheet.pdf"&gt;subscription model for the Web Mapping APIs&lt;/a&gt;. For example if you geocode more than 1000 addresses, you'll need to purchase a subscription.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3306209722829837644-5196294018522698992?l=rexdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rexdotnet.blogspot.com/feeds/5196294018522698992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3306209722829837644&amp;postID=5196294018522698992' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/5196294018522698992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/5196294018522698992'/><link rel='alternate' type='text/html' href='http://rexdotnet.blogspot.com/2009/11/using-arcgis-server-rest-api-in-net.html' title='Using the ArcGIS Server REST API in .NET applications'/><author><name>rex hansen</name><uri>http://www.blogger.com/profile/17162176312798283112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_T5Js6sbq8JI/STJscHpuo0I/AAAAAAAAAAo/XqBIYxGy13E/S220/rexfaceclip.PNG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3306209722829837644.post-334148104577916510</id><published>2009-09-24T00:14:00.000-07:00</published><updated>2010-06-15T00:25:55.452-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bing'/><category scheme='http://www.blogger.com/atom/ns#' term='arcgis online'/><category scheme='http://www.blogger.com/atom/ns#' term='licensing'/><category scheme='http://www.blogger.com/atom/ns#' term='mapit'/><title type='text'>"Price check on Bing Maps"</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Over the past couple months, I've chatted with a number of people interested in using Bing Maps services in their applications; map-centric and otherwise. If they had any questions or wanted to purchase a license, I always mentioned that they could contact Microsoft directly. This got me wondering, if someone did contact Microsoft with questions about purchasing a Bing Maps license, what would they experience? Simple enough to try – so I called their contact number listed on their &lt;/span&gt;&lt;a href="http://www.microsoft.com/maps/product/licensing.aspx"&gt;&lt;span style="font-family:verdana;"&gt;licensing page&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;.&lt;br /&gt;&lt;br /&gt;I was directed to the voice mail of someone on the sales staff. His voice mail greeting provided his email address, so I decided to send him an email with a single question to get the ball rolling. Literally 7 minutes later I got a response… I was impressed. He needed more information, so I provided it and waited for a response. The following day I sent an email asking for an update and he called me within 5 minutes. Evidently he called my main work number and made his way to my desk… quick, resourceful… again I was impressed. After a lengthy conversation, a few interesting details about the licensing and cost of Bing Maps became apparent. Let’s start with the first question:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;After the 90-day evaluation period, do I have to purchase a license to continue using Bing Maps imagery, geocode, and route services?&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;No, but the use case is very limited. You can continue to use Bing Maps staging services beyond the 90-day evaluation period if the application is:&lt;br /&gt;1) available publicly, on the Internet, without restriction&lt;br /&gt;2) completely non-commercial, meaning you make no money on its use, directly or indirectly&lt;br /&gt;&lt;br /&gt;Note you still have to abide by the limits defined for the 90-day evaluation. So this pretty much covers soccer moms trying to organize team events on a map or allows your friendly fantasy football commissioner to show folks how to get to his house for the draft. Granted the Bing Maps imagery services will still have “Staging” plastered on each tile, so the map may not be very pleasing. Outside of this, all other scenarios require a license. This includes all internal applications (commercial or non-commercial, Web or desktop), all commercial applications, and all government applications. Logically this leads to the next question…&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;How much is a license to use Bing Maps?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Short answer…the standard package is $8000 for 1,000,000 transactions. This is the minimum to get started. The transactions sit a pool for use with all Bing services: imagery, geocode, routing, search, etc. So…&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What is considered a transaction?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;It depends on the service. The best place I’ve found to get detailed information on this is the &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc981104.aspx"&gt;&lt;span style="font-family:verdana;"&gt;transaction report description&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; for Bing Maps. In general, use the following as a guide:&lt;br /&gt;&lt;br /&gt;8 map tiles = 1 map transaction&lt;br /&gt;1 geocode = 1 transaction&lt;br /&gt;1 route = 1 transaction&lt;br /&gt;&lt;br /&gt;In the end, I was both impressed and satisfied with the responsive Bing Maps customer service. The guy I spoke with was clear, concise and real; he knew the technical details and presented it well. I’m definitely more comfortable referring folks to Bing Maps now that I know first hand what they’ll experience. I still find it interesting that if you are using a licensed ArcGIS product or API you can purchase access to Bing Maps through ArcGIS Online for significantly less - $2500 for 1,000,000 transactions (see the &lt;/span&gt;&lt;a href="http://www.esri.com/software/arcgis/arcgisonline/arcgis-online-pricing-sheet.pdf"&gt;&lt;span style="font-family:verdana;"&gt;price sheet&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;). The only difference is ESRI customer service provides you with a Bing Maps account and you can purchase transactions in smaller blocks (100,000). In your application you still work with Bing services directly. We'll see what happens moving forward, but for now ESRI customers appear to have some options when buying into Bing Maps.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3306209722829837644-334148104577916510?l=rexdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rexdotnet.blogspot.com/feeds/334148104577916510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3306209722829837644&amp;postID=334148104577916510' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/334148104577916510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/334148104577916510'/><link rel='alternate' type='text/html' href='http://rexdotnet.blogspot.com/2009/09/price-check-on-bing-maps.html' title='&quot;Price check on Bing Maps&quot;'/><author><name>rex hansen</name><uri>http://www.blogger.com/profile/17162176312798283112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_T5Js6sbq8JI/STJscHpuo0I/AAAAAAAAAAo/XqBIYxGy13E/S220/rexfaceclip.PNG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3306209722829837644.post-5138837647048510597</id><published>2009-08-23T00:41:00.000-07:00</published><updated>2010-06-15T00:28:50.535-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arcims'/><category scheme='http://www.blogger.com/atom/ns#' term='arcgis server'/><title type='text'>ArcIMS equivalency in ArcGIS Server?</title><content type='html'>&lt;div   style=";font-family:verdana;"&gt; &lt;span style=";font-family:verdana;font-size:100%;"  &gt;In May of 2000, ArcIMS 3.0 was released and over the next few years it took the Web GIS world by storm. There were few competitors, so the market was ripe. While it was considered complicated initially, most folks were able to buckle down and wrap their head around the technology - and build some rock solid solutions. HTML Viewer based applications, servlet connectors, and custom solutions using the ActiveX, ColdFusion or Java connector started popping up all over the Web. Turns out, ArcIMS was actually simple – all interaction was stateless and anything it could do on the server was dictated by ArcXML – so its boundaries were well defined. Plus it did its job very well. Dynamic mapping, feature streaming, queries, geocoding, extract... all were quick and efficient.&lt;br /&gt;&lt;br /&gt;In the Web mapping world of late 2009, ESRI brings its wealth of GIS intelligence to a party that includes companies originally founded on search engines, operating systems, and business software. The market has expanded dramatically since ArcIMS was first released, and it continues to grow. ArcGIS Server now provides a comprehensive enterprise GIS solution for the Web with seemingly unlimited capabilities, especially when you factor in access to ArcObjects on the server. In general, it integrates with a diverse range of back-end data stores, utilizes an effective and robust authoring environment to build data and logic into a service, and it exposes numerous public Web service formats and protocols to support a wide range of consumers. In addition, a bevy of Web clients are available… server-side AJAX solutions using the ADFs, lightweight browser clients using the JavaScript API, and rich Web clients using Silverlight or Flex. With the sheer volume of features, functionality, frameworks and APIs in the ArcGIS Server suite, it remains unmatched as a complete enterprise GIS solution.&lt;br /&gt;&lt;br /&gt;So with all this said, we know that ArcGIS Server can do so much more than ArcIMS in many areas, but are there still some things ArcIMS can do that ArcGIS Server can’t – or can’t do very easily? Yes. Let’s step through the ArcIMS service (virtual server) types as see:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Geocode?&lt;/strong&gt; Yes, ArcGIS Server has it covered in the geocode service.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Route?&lt;/strong&gt; Yes, ArcGIS Server has it covered in the network analyst extension on a map service.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Metadata?&lt;/strong&gt; Yes. The GIS Portal Toolkit was added as an extension to 9.3. At 9.3.1 it was termed the &lt;a href="http://www.esri.com/software/arcgis/geoportal/index.html"&gt;ArcGIS Server Geoportal extension&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Extract?&lt;/strong&gt; Yes, but it’s not as simple as ArcIMS. In ArcGIS Server you can emulate an extract virtual server with a &lt;a href="http://resources.esri.com/help/9.3/arcgisserver/adf/dotnet/developer/samples/Web_Applications/ArcGIS_ClipShip_Geoprocessing/ee81038c-c1be-4490-b6c7-9b63ed9e8881.htm"&gt;custom tool (model) in a GP service&lt;/a&gt;. Granted GP can be very complex, but also very powerful... a good trade-off. Geodata services do provide an extract option, but the service was primary designed for the ArcGIS desktop client and functionality is limited to working with a geodatabase.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Feature?&lt;/strong&gt; Yes, except it’s handled via a query operation on a feature layer in map service. The feature virtual server was primarily designed for the Java Viewer - the “rich” Web client when ArcIMS was first released. ArcGIS Server 9.4 will include a feature service with much greater functionality that that provided in ArcIMS.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ArcMap?&lt;/strong&gt; Not quite. In general the ArcMap virtual server just exposes a subset of ArcGIS Server map service capabilities... so generating dynamic maps and querying layers is covered. One notable difference involves access to page layouts. In ArcIMS you can use GET_LAYOUT to generate printable output from a page layout in an mxd hosted by an ArcMap image service. In ArcGIS Server this capability is not available via a Web service protocol or format. Instead you must use ArcObjects (remote) and QI to IMapServerLayout from the map server object -or- use the Web ADF's &lt;a href="http://resources.esri.com/help/9.3/arcgisserver/adf/dotnet/developer/ADF/control_pagelayout.htm"&gt;PageLayout&lt;/a&gt; control which only works with local ArcGIS Server data sources. In either case interaction usually remains stateless.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Image (map) and query?&lt;/strong&gt; No, but ArcGIS Server is crossing things off the list. On the server customization side, ArcGIS Server is unmatched. You can extend a server object in ArcGIS Server using .NET or Java –or- create and access ArcObjects remotely. In ArcIMS customizing a virtual server using C++ was rare and relatively difficult. There's also the issue of performance. Dynamic mapping in ArcIMS is notoriously fast. To match and exceed ArcIMS performance, ArcGIS Server provides the ability to &lt;a href="http://webhelp.esri.com/arcgisserver/9.3/dotNet/index.htm#what_is_map_caching.htm"&gt;pre-cache map tiles &lt;/a&gt;(9.2+) and to generate “fast” dynamic maps with &lt;a href="http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?id=546&amp;amp;pid=545&amp;amp;topicname=Publishing_optimized_map_services"&gt;optimized services &lt;/a&gt;(9.3.1+). One notable addition to ArcIMS 9.0 was the ability to reproject geometry using GET_PROJECT. This was covered in ArcGIS Server 9.3 with the release of the &lt;a href="http://webhelp.esri.com/arcgisserver/9.3/dotNet/index.htm#geometry_service.htm"&gt;Geometry service&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;With this out of the way, let’s focus on comparing the stateless capabilities of ArcIMS image\query and ArcGIS Server map services. Below I’ve listed six stateless capability categories that are popular in ArcIMS and still deficient at some level in ArcGIS Server: &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;Reorder layers (including graphics) – It’s &lt;a href="http://resources.esri.com/help/9.3/arcgisserver/adf/dotnet/developer/samples/Web_Applications/ArcGIS_AddDynamicData/f90cedfd-ad48-4c81-ba00-5a17e1a09c5c.htm"&gt;possible in ArcGIS Server&lt;/a&gt; but requires a stateful change and you must work with fine-grained ArcObjects&lt;a href="http://www.blogger.com/NIM012523"&gt;.&lt;/a&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;Change layer renderers – It’s &lt;a href="http://resources.esri.com/help/9.3/arcgisserver/adf/dotnet/developer/samples/Web_Applications/ArcGIS_AddDynamicData/f90cedfd-ad48-4c81-ba00-5a17e1a09c5c.htm"&gt;possible in ArcGIS Server&lt;/a&gt; but requires a stateful change and you must work with fine-grained ArcObjects&lt;a href="http://www.blogger.com/NIM006780"&gt;.&lt;/a&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;Enable use of variable transparency for symbols (applied to graphic elements, selection sets, etc.) – Right now symbol transparency can be either 0% or 100%&lt;a href="http://www.blogger.com/NIM013404"&gt;.&lt;/a&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;Add dynamic layers – It’s &lt;a href="http://resources.esri.com/help/9.3/arcgisserver/adf/dotnet/developer/samples/Web_Applications/ArcGIS_AddDynamicData/f90cedfd-ad48-4c81-ba00-5a17e1a09c5c.htm"&gt;possible in ArcGIS Server &lt;/a&gt;but requires a stateful change and you must work with fine-grained ArcObjects&lt;a href="http://www.blogger.com/NIM006781"&gt;.&lt;/a&gt; If dynamic layers can be added, two additional capabilities will be necessary for equivalency:&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;ol type="a"&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;Enable joins in dynamic layers&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;Query dynamic layers&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;Support related data in query results - All ArcGIS Server map service query operations support returning joined data. In 9.3 the identify operation returns related data (SOAP only), but other query operations do not. So, to retrieve related rows in an ArcGIS Server map service right now, you have to use fine-grained ArcObjects and traverse the relationship class collection on a feature layer. This will change in 9.4; query operations will return related data&lt;a href="http://www.blogger.com/NIM040662"&gt;.&lt;/a&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;Fully support scale dependent rendering on a single layer - This is relatively easy to do with ArcXML in a map configuration file, but in &lt;a href="http://resources.esri.com/help/9.3/arcgisserver/apis/ArcObjects/esriCarto/ScaleDependentRenderer.htm"&gt;ArcMap it requires VBA &lt;/a&gt;and the symbology is not readily accessible – namely the Toc swatches are empty. A better solution involves using a group layer in ArcMap. Essentially you add a reference to the same layer multiple times within a group and set the scale dependency and symbology for each layer. Unfortunately all the layers show up in the Toc (even those outside scale range) so the experience isn’t exactly like ArcIMS, which seems cleaner&lt;a href="http://www.blogger.com/NIM005170"&gt;.&lt;/a&gt; &lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;For the most part, ArcIMS equivalency can be found in ArcGIS Server. My interest in posting the exceptions is three-fold: to provide awareness of these issues, to mention resolutions pending in future versions, and to provide guidance on a current solutions or workarounds. If you’re aware of another ArcIMS equivalency issue in ArcGIS Server, I encourage you to add a comment below. Hope this was helpful.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3306209722829837644-5138837647048510597?l=rexdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rexdotnet.blogspot.com/feeds/5138837647048510597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3306209722829837644&amp;postID=5138837647048510597' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/5138837647048510597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/5138837647048510597'/><link rel='alternate' type='text/html' href='http://rexdotnet.blogspot.com/2009/08/arcims-equivalency-in-arcgis-server.html' title='ArcIMS equivalency in ArcGIS Server?'/><author><name>rex hansen</name><uri>http://www.blogger.com/profile/17162176312798283112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_T5Js6sbq8JI/STJscHpuo0I/AAAAAAAAAAo/XqBIYxGy13E/S220/rexfaceclip.PNG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3306209722829837644.post-8812224631177069113</id><published>2009-08-14T15:45:00.000-07:00</published><updated>2010-06-15T00:30:09.186-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='mapit'/><title type='text'>ArcGIS Silverlight/WPF API and ESRI MapIt blogs up and running</title><content type='html'>&lt;span style="font-family:verdana;"&gt;The ArcGIS API for Microsoft Silverlight/WPF and ESRI MapIt, two new products in the ESRI suite, were released during the &lt;/span&gt;&lt;a href="http://www.esri.com/events/uc/"&gt;&lt;span style="font-family:verdana;"&gt;2009 Users Conference &lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;in early July. Now, each has it's own blog hosted by ESRI.&lt;br /&gt;&lt;br /&gt;Silverlight/WPF Blog: &lt;a href="http://blogs.esri.com/Dev/blogs/silverlightwpf/"&gt;http://blogs.esri.com/Dev/blogs/silverlightwpf/&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;ESRI MapIt Blog: &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;a href="http://blogs.esri.com/Dev/blogs/mapit/"&gt;http://blogs.esri.com/Dev/blogs/mapit/&lt;/a&gt;&lt;a href="http://blogs.esri.com/Dev/blogs/silverlightwpf/"&gt; &lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;Both are available their respective resource centers as well (&lt;/span&gt;&lt;a href="http://resources.esri.com/arcgisserver/apis/silverlight/index.cfm?fa=blog"&gt;&lt;span style="font-family:verdana;"&gt;Silverlight/WPF&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;, &lt;/span&gt;&lt;a href="http://resources.esri.com/mapit/index.cfm?fa=blog"&gt;&lt;span style="font-family:verdana;"&gt;MapIt&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;). &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=""&gt;&lt;span style="font-family:verdana;"&gt;I'm the lead product engineer for both products, so I've been busy working with a group of extremely talented developers at ESRI to build and get them out the door. The ESRI blogs should provide you with some great information about both products... good times ahead for sure.&lt;/span&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3306209722829837644-8812224631177069113?l=rexdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rexdotnet.blogspot.com/feeds/8812224631177069113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3306209722829837644&amp;postID=8812224631177069113' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/8812224631177069113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/8812224631177069113'/><link rel='alternate' type='text/html' href='http://rexdotnet.blogspot.com/2009/08/arcgis-silverlightapi-and-esri-mapit.html' title='ArcGIS Silverlight/WPF API and ESRI MapIt blogs up and running'/><author><name>rex hansen</name><uri>http://www.blogger.com/profile/17162176312798283112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_T5Js6sbq8JI/STJscHpuo0I/AAAAAAAAAAo/XqBIYxGy13E/S220/rexfaceclip.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3306209722829837644.post-7568680569094687580</id><published>2009-01-24T15:34:00.000-08:00</published><updated>2010-06-15T00:36:06.493-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='soap'/><category scheme='http://www.blogger.com/atom/ns#' term='arcgis'/><title type='text'>Consuming ArcGIS Server SOAP services in Silverlight 2.0</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Microsoft's &lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt; platform offers yet another application environment in which to consume SOAP services. The Silverlight platform is truly tantalizing - the ability to blend\mash\mix services and data with a rich user experience in a web client is undeniably sexy and powerful. Unfortunately some of the backend plumbing still needs to be worked out. This includes Silverlight's ability to consume SOAP services, let alone ArcGIS Server's SOAP service stack. Sure, everyone's talking about REST and WCF, but W3C standard, contract based, explicitly typed interaction with SOAP services is still prevalent - just take a look at the recent release of the &lt;a href="http://msdn.microsoft.com/en-us/library/cc980922.aspx"&gt;Virtual Earth Web Service SDK&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;So how do you consume a SOAP service in a Silverlight application or class library? Once you install the Silverlight tools with Visual Studio (or Web Developer) 2008 sp1 you will be provided with a context menu item off the project in Solution Explorer. The item is named "Add Service Reference" and opens a dialog box for a developer to define the endpoint to a service (WCF,SOAP) and a namespace for the native client types that will be generated.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;img src="http://www.drivehq.com/file/df.aspx/publish/rex_hansen/images/addserviceref.png" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;This capability is synonymous with the "Add Web Reference" capability for SOAP services in standard .NET projects. A single url to a WSDL is used to construct a SOAP proxy and a set of value object types. This provides a nice interface for one-off services, but if you have a set of services that share value object types and you want to generate a single library with a single namespace, you need to use a command line tool. This is possible with the NET 2.0 and 3.5 SDKs which include the web service utilities &lt;a href="http://msdn.microsoft.com/en-us/library/7h3ystb6.aspx"&gt;wsdl.exe&lt;/a&gt; &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;and &lt;a href="http://msdn.microsoft.com/en-us/library/aa347733.aspx"&gt;svcutil.exe&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;, respectively. Note, wsdl.exe output is supported in .NET 2.0 - 3.5. Unfortunately Silverlight does not provide the same or similar utility. Before Silverlight 2.0 final was released, a utility named slwsdl.exe was available for this purpose. Unfortunately it was &lt;a href="http://silverlight.net/forums/p/13308/43981.aspx#43981"&gt;removed from the 2.0 final release&lt;/a&gt; &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;for reasons unknown. In addition, the output from wsdl.exe and svcutil.exe will &lt;a href="http://msdn.microsoft.com/en-us/library/cc896571(VS.95).aspx"&gt;not work with Silverlight applications&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;. Both wsdl.exe and svcutil.exe generate references to types that are not available in the Silverlight platform. Problematic type references generated in svcutil.exe output can be removed so reference code can actually be built as a Silverlight class library. Unfortunately the proxy class includes both synchronous and Begin\End asynchronous methods. Neither pattern is supported in a Silverlight application. In fact, the Silverlight "Add Service Reference" tool only generates Async\Completed asynchronous methods, which is the "&lt;a href="http://msdn.microsoft.com/en-us/library/wewwczdw(VS.80).aspx"&gt;promoted&lt;/a&gt;" pattern for event-based asynchronous programming&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;. Apparently there is no way to trigger svcutil.exe to only generate the appropriate asynchronous methods for Silverlight and synchronous methods are not officially supported in Silverlight, apparently due to &lt;a href="https://silverlight.net/forums/t/34531.aspx)."&gt;cross-browser support issues&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So with all this in mind, how can you generate a single library that contains all the proxy classes and value object types for all ArcGIS Server service types? It’s hokey, but you need to manually merge all WSDLs into a single WSDL – being careful to place the element types in the same locations (e.g. element vs. operation, etc.). You only need to do this once since the library you generate will be distributable thus reusable for all Silverlight applications\libraries. In fact, the sample included with this post includes the reference class file generated from this process, so you don’t need to mess around with the ArcGIS Server WSDLs – just download the sample and compile the ArcGIS_SOAP_Silverlight project. Or just use the precompiled ArcGIS_SOAP_Silverlight.dll in the bin folder.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;bold&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;The sample is available &lt;/strong&gt;&lt;a href="ftp://ftp.drivehq.com/rex_hansen/SampleCode/ArcGISSOAPSilverlightDemo.zip"&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;. &lt;/bold&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;The sample also contains a Silverlight application that illustrates a simple use case for consuming an ArcGIS Server dynamic map service and navigating the map. Left mouse click on the map zooms in, Shift+left mouse click zooms out. Note you’ll need Visual Studio 2008 sp1 and the Silverlight tools to load and build the projects in the solution (see &lt;/span&gt;&lt;a href="http://silverlight.net/getstarted"&gt;&lt;span style="font-family:verdana;"&gt;http://silverlight.net/getstarted&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; for more info). You can give a test run below. It's designed to be instructive, so it's pretty simple.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;iframe style="WIDTH: 100%; HEIGHT: 400px; overflow: auto;" src="http://www.drivehq.com/file/df.aspx/publish/rex_hansen/SampleCode/ArcGIS_SOAP_Silverlight_AppTestPage.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;One additional note, the Web site that hosts the ArcGIS Server services must have a clientaccesspolicy.xml(Silverlight) or crossdomain.xml(Flex) in place to support cross domain\site requests. &lt;a href="http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx"&gt;Silverlight will work with either&lt;/a&gt;. If using crossdomain.xml the following entry will enable SOAP interaction for all consumers:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="FONT-SIZE: 110%; BACKGROUND-COLOR: #F1F1F1"&gt;&amp;lt;allow-http-request-headers-from headers="*" domain="*"&amp;gt; &lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3306209722829837644-7568680569094687580?l=rexdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rexdotnet.blogspot.com/feeds/7568680569094687580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3306209722829837644&amp;postID=7568680569094687580' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/7568680569094687580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/7568680569094687580'/><link rel='alternate' type='text/html' href='http://rexdotnet.blogspot.com/2009/01/consuming-arcgis-server-soap-services.html' title='Consuming ArcGIS Server SOAP services in Silverlight 2.0'/><author><name>rex hansen</name><uri>http://www.blogger.com/profile/17162176312798283112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_T5Js6sbq8JI/STJscHpuo0I/AAAAAAAAAAo/XqBIYxGy13E/S220/rexfaceclip.PNG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3306209722829837644.post-7776381663834841063</id><published>2008-11-29T23:59:00.000-08:00</published><updated>2010-06-15T00:42:42.086-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dynamic layers'/><category scheme='http://www.blogger.com/atom/ns#' term='cross-site scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='adf javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='adf'/><category scheme='http://www.blogger.com/atom/ns#' term='soap'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><title type='text'>ArcGIS Web ADF, JavaScript, and REST</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Currently the Web ADF does not include an ArcGIS Server data source that supports consuming &lt;a href="http://resources.esri.com/help/9.3/arcgisserver/apis/REST/index.html"&gt;ArcGIS Server services via REST&lt;/a&gt;. Instead, the pre-packaged ArcGIS Server Internet data source uses the &lt;a href="http://resources.esri.com/help/9.3/arcgisserver/apis/SOAP/index.htm"&gt;SOAP API&lt;/a&gt; to consume ArcGIS Server services. From a platform perspective, this makes sense because the Web ADF is founded in a rich, server-side ASP.NET development environment where SOAP provides some clear benefits. Let's look at this topic in more detail...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/REST"&gt;REST&lt;/a&gt; is a lightweight, non-standard format which can be used to request data over HTTP. REST is especially attractive to browser developers because it can be leveraged with JavaScript, &lt;a href="http://en.wikipedia.org/wiki/Json"&gt;JSON&lt;/a&gt;, and HTML to create an efficient, pure client solution - namely one that uses only browser logic and can initiate cross-domain requests for data. In general, requests contain a manually concatenated string of argument-value pairs and responses consist of standard content types, such as JSON (text) and images. While the benefits of using REST in a browser context with JavaScript are clear, other application environments present some hurdles. Since REST is not founded on a public standard, a developer needs documentation to learn how to interact with a REST service. This may suffice when working with client script, but developers working in an IDE with object-oriented languages like C#, VB.NET and Java often demand more. Why parse strings when you can work with explicit service types, discover parameters using intellisense, and utilize a proxy to manage requests\responses? This is where SOAP comes into the picture. &lt;a href="http://en.wikipedia.org/wiki/SOAP_(protocol)"&gt;SOAP&lt;/a&gt; is a standard &lt;a href="http://www.w3.org/"&gt;W3C&lt;/a&gt; procotol which defines the XML message format for requests to and responses from a SOAP service. &lt;a href="http://en.wikipedia.org/wiki/Web_Services_Description_Language"&gt;WSDL&lt;/a&gt;, another W3C standard language, provides the contract for how a consumer can interact with a SOAP service. While a SOAP message is an XML formatted string, a developer does not need to construct and parse it manually. Since SOAP is based on standard protocols and languages, toolkits for specific development environments are available to automatically construct native types. More specifically, the WSDL is used to construct a proxy class and a set of supporting types for use in an specific object-oriented environment. The proxy class exposes a set of operations (methods) which initiate Web requests. The supporting types are used to define inputs as value objects (termed 'value objects' because they only store values), which the proxy uses to construct a SOAP message. The response from a service can be deserialized by the proxy into one or more value objects. The benefit here is clear; a developer is able to use complex service-specific types native to their development environment to interact with a service.&lt;br /&gt;&lt;br /&gt;The key difference between the use of REST and SOAP lies in the WSDL. The WSDL provides a central, language agnostic means for defining how to interact with a SOAP service. Different development environments can use the WSDL to construct the same set of types on-the-fly using a SOAP toolkit. REST does not define a compliment to the WSDL. As a result, documentation must be used to determine request and response content. Technically, you can manually construct a proxy and set of types to interact with a REST service, but without a central definition or standard (provided by a WSDL) the API structure will likely differ between developers.&lt;br /&gt;&lt;br /&gt;So where does it make sense to leverage REST services in the Web ADF? REST services should be utilized in the browser, thus integrated with the Web ADF using the ADF JavaScript library. In this capacity, REST services may be used to enhance Web ADF application behavior and performance. One such area involves simply adding non-cached map services using pure client logic, something the Web ADF does not provide out-of-the-box. Currently non-cached map services use the AdfMapHandler class in ADF JavaScript to generate dynamic map images. This class requires Web-tier components; namely a map resource associated with a MapResourceManager and Map server control. It uses the ADF MapHandler to generate dynamic maps. The same applies for the Toc; it still relies heavily on Web-tier manipulation. You can, however, extend the ADF JavaScript DynamicLayer class to work with a non-cached service via REST.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The sample is available &lt;/strong&gt;&lt;a href="ftp://ftp.drivehq.com/rex_hansen/SampleCode/ADFJSRestLayers.zip"&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;There are a few caveats:&lt;br /&gt;&lt;br /&gt;1) The layer (i.e. resource) is only available on the client; server components do not know about it. As a result, any requests to the server that work with map resources will not include this layer. In addition, most ADF controls require modification on the server to change their rendered content. This includes the Toc, so if you want the pure client layer to show up in an ADF Toc, you’ll need to customize Toc content using code on the server.&lt;br /&gt;&lt;br /&gt;2) Using services secured with token-based authentication requires a proxy. Here’s a link to step on how to set this up: &lt;/span&gt;&lt;a title="http://resources.esri.com/help/9.3/arcgisserver/apis/javascript/arcgis/help/jshelp_start.htm#jshelp/ags_proxy.htm" href="http://resources.esri.com/help/9.3/arcgisserver/apis/javascript/arcgis/help/jshelp_start.htm#jshelp/ags_proxy.htm"&gt;&lt;span style="font-family:verdana;"&gt;http://resources.esri.com/help/9.3/arcgisserver/apis/javascript/arcgis/help/jshelp_start.htm#jshelp/ags_proxy.htm&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;. Using a proxy is a popular solution for working around &lt;a href="http://en.wikipedia.org/wiki/Cross-site_scripting"&gt;cross-site scripting restrictions&lt;/a&gt; in a browser. Abe Fettig has researched a number of these solutions and presented them in a &lt;a href="http://fettig.net/weblog/2005/11/28/how-to-make-xmlhttprequest-connections-to-another-server-in-your-domain/"&gt;blog post&lt;/a&gt;. Note, you can use a proxy even if authentication is not required.&lt;br /&gt;&lt;br /&gt;In the sample I provided, if a proxy (via the proxyUrl property) is defined when creating a new DynamicRestLayer, the proxy will be used. In this case, a POST request is always generated to guarantee that all the input arguments are passed to the remote site. The response is JSON and contains the properties of the generated map image, including the url and extent. If no proxy is specified for the DynamicRestLayer, a simple GET request for a map image is made via a dynamic image tag. The image tag source is not subject to cross-site scripting restrictions in the browser, so we don’t need a proxy. Both IE7 and FireFox 2+ work great with the no proxy solution. Unfortunately IE6 is somewhat problematic (e.g. triggers erroneous requests). If you need to support IE6, you may want to go the proxy route.&lt;br /&gt;&lt;br /&gt;This brings up an interesting point - the ADF JavaScript Map component is designed to render and blend maps using dynamic image tags. The image tag source is not subject to cross-site scripting restrictions. Since a REST map service can return the raw map image, the sample included with this post merely builds on REST capabilities and ADF JavaScript architecture. Another option involves using dynamic script tags whose source references a REST endpoint that generates JSON. The data returned from the REST service is evaluated as a JavaScript object when the tag is loaded or inserted in the page. This could also work with ADF JavaScript, but would require more implementation code. Interestingly, dynamic script tags are leveraged by the ArcGIS JavaScript API.&lt;br /&gt;&lt;br /&gt;Note, the sample also shows how to use REST to access tiles in a cached map service with a pure client layer. It may be of interest since the url is standard across sites (e.g. you don’t need to know the virtual cache directory). &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3306209722829837644-7776381663834841063?l=rexdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rexdotnet.blogspot.com/feeds/7776381663834841063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3306209722829837644&amp;postID=7776381663834841063' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/7776381663834841063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/7776381663834841063'/><link rel='alternate' type='text/html' href='http://rexdotnet.blogspot.com/2008/11/arcgis-web-adf-javascript-and-rest.html' title='ArcGIS Web ADF, JavaScript, and REST'/><author><name>rex hansen</name><uri>http://www.blogger.com/profile/17162176312798283112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_T5Js6sbq8JI/STJscHpuo0I/AAAAAAAAAAo/XqBIYxGy13E/S220/rexfaceclip.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3306209722829837644.post-4985181140202131764</id><published>2008-11-10T02:06:00.000-08:00</published><updated>2010-06-15T00:44:40.248-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='adf'/><category scheme='http://www.blogger.com/atom/ns#' term='event handler'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Web ADF JavaScript: How to determine event argument contents</title><content type='html'>&lt;span style="font-family:verdana;"&gt;As many &lt;a href="http://resources.esri.com/help/9.3/arcgisserver/adf/dotnet/developer/ADF/adf_overview.htm"&gt;Web ADF &lt;/a&gt;developers already know, the 9.3 release contains a new public &lt;a href="http://resources.esri.com/help/9.3/arcgisserver/adf/dotnet/developer/ADF/adfjavascript_overview.htm"&gt;JavaScript library &lt;/a&gt;built on the &lt;a href="http://msdn.microsoft.com/en-us/library/bb397536.aspx"&gt;Microsoft AJAX library&lt;/a&gt;. A host of ADF client controls and components (e.g. Map, Toolbar, etc.) maintain event handlers which enable ADF developers to listen for and interact with actions solely on the client (browser). Unfortunately the ADF JavaScript library reference does not contain the event argument types for event handlers. While this will be rectified at some point in the future, there is another option. You can determine the event argument types by looking in ADF JavaScript debug files installed in two locations:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;&lt;iis&gt;&lt;iis&gt;&amp;lt;IIS Root&amp;gt;\aspnet_client\ESRI\WebADF\JavaScript&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;&amp;lt;ArcGIS Install&amp;gt;\DotNet\VirtualRootDir\aspnet_client\ESRI\WebADF\JavaScript&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;Search for references to this._raiseEvent in all debug JavaScript (*.debug.js) files. The first parameter to the _raiseEvent function is the type of event (e.g. 'click'). Any subsequent parameter is included as an event argument to any handler. You can look at the code to determine what the event argument contains.&lt;br /&gt;&lt;br /&gt;For example, in the ESRI.ADF.UI.Map.debug.js file you’ll notice the click event is raised in the _onMouseUp function (shortened for the example):&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-family:courier new;"&gt;_onMouseUp : &lt;span style="color:blue;"&gt;function&lt;/span&gt;(evt) {&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color:blue;"&gt;  var&lt;/span&gt; e = &lt;span style="color:blue;"&gt;this&lt;/span&gt;._makeMouseEventRelativeToMap(evt,&lt;span style="color:blue;"&gt;true&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="LINE-HEIGHT: 115%;font-family:courier new;"  &gt;  . . .&lt;br /&gt;&lt;span style="color:blue;"&gt;  this&lt;/span&gt;._raiseEvent(&lt;span style="color:#a31515;"&gt;'click'&lt;/span&gt;,e);&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;The browser event is modified in the _makeMouseEventRelativeToMap function to set its coordinate property to a new ESRI.ADF.Geometries.Point as the location of the user click on the map client control. In this case, the _raiseEvent function for 'click' indicates that an event argument is included, is modified, and the type is not an array. In other cases, no event argument is passed (e.g. map's extentChanging event) or the event argument contains an array with many objects (e.g. map’s extentChanged event).&lt;br /&gt;&lt;br /&gt;The first parameter to an event handler is the sender, which is the client component on which the event was raised. Any subsequent argument, if defined, matches the event argument in the call to _raiseEvent.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3306209722829837644-4985181140202131764?l=rexdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rexdotnet.blogspot.com/feeds/4985181140202131764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3306209722829837644&amp;postID=4985181140202131764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/4985181140202131764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/4985181140202131764'/><link rel='alternate' type='text/html' href='http://rexdotnet.blogspot.com/2008/11/web-adf-javascript-how-to-determine.html' title='Web ADF JavaScript: How to determine event argument contents'/><author><name>rex hansen</name><uri>http://www.blogger.com/profile/17162176312798283112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_T5Js6sbq8JI/STJscHpuo0I/AAAAAAAAAAo/XqBIYxGy13E/S220/rexfaceclip.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3306209722829837644.post-7137230817143457502</id><published>2008-11-02T01:10:00.000-07:00</published><updated>2010-06-15T00:45:22.097-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='soap'/><category scheme='http://www.blogger.com/atom/ns#' term='arcgis'/><category scheme='http://www.blogger.com/atom/ns#' term='server object extension'/><category scheme='http://www.blogger.com/atom/ns#' term='soe'/><title type='text'>ArcGIS Server: Expose a custom server object extension via SOAP</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Extending ArcGIS Server using ArcObjects can take two forms: a utility COM object or a server object extension. A utility COM object is simply a COM component created and managed explicitly in server context. A server object extension (SOE) is coupled with a server object and thus can share initialization, resource utilization, and disposal. Use of a COM utility has been possible since the first version of ArcGIS Server (9.0). Custom SOEs were introduced for ArcGIS Server .NET at version 9.2. ArcGIS Server Java does not offer an SOE solution at the moment, but it is likely forthcoming. The reasons for extending ArcGIS Server and differences between both techniques are available &lt;/span&gt;&lt;a href="http://resources.esri.com/help/9.3/arcgisserver/adf/dotnet/developer/ArcGIS/ArcObjects/extend_ags_overview.htm" target="_blank"&gt;&lt;span style="font-family:verdana;"&gt;elsewhere&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; so I'll skip that discussion here. I want to discuss exposing ArcObjects logic in a custom server object extension via a prepackaged ArcGIS Server Web service handler. Two major protocols are supported, SOAP and REST. Let's dive in...&lt;br /&gt;&lt;br /&gt;The ArcGIS Server SOAP API is implemented at the server object level. This means that SOAP messages are processed directly by a server object or extension (SOE). The ArcGIS Server SOAP Web service handler directs SOAP messages to a server object for you. The ArcGIS Server REST API is not implemented at the server object level. The ArcGIS Server REST Web service handler processes restful requests and (in general) uses the ArcGIS Server SOAP API to communicate with ArcGIS Server. How does this relate to exposing a custom SOE as a Web service? The SOAP Web service handler contains logic to discover custom SOEs with a SOAP interface (see sample and discussion below). The REST Web service handler does not contain the logic to discover custom SOEs at this time. Consequently, to expose a custom SOE as a REST service you’ll need to create your own Web service to handle restful requests and work with the SOE. Unfortunately this means you'll need to work with ArcObjects remotely in the Web service logic, which will require an ArcGIS Server license in the app-tier... a less than optimal solution. The folks at ESRI who work on the REST handler may resolve this in the future.&lt;br /&gt;&lt;br /&gt;I've included a sample that illustrates how to expose a custom SOE via the ArcGIS Server SOAP Web service handler. It builds on the current &lt;/span&gt;&lt;a href="http://resources.esri.com/help/9.3/arcgisserver/adf/dotnet/developer/samples/Web_Applications/ArcGIS_Simple_Server_Object_Extension/8e8b2bf6-1877-4c48-80fe-266f5fa70f57.htm" target="_blank"&gt;&lt;span style="font-family:verdana;"&gt;Server SDK sample which shows how to create a simple SOE&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style=""&gt;.&lt;br /&gt;&lt;br /&gt;I’ve modified this sample to illustrate how to support exposing a custom SOE using an ArcGIS Server Web service endpoint. The sample is merely instructive, so it just provides the basics of custom SOE development. To expose a WSDL for the custom SOE and make it available via an ArcGIS Server Web service endpoint, create a WSDL and put it in the &lt;arcgis&gt;\XmlSchema folder on the machine where the SOM is running. The name of the registered server object extension and the name of the *.wsdl file must be the same. To process SOAP requests, implement the IRequestHandler and IRequestHandler2 interfaces in the custom SOE class. In this example, the implementation code parses the incoming SOAP request and generates a raw SOAP response string. The response should match the WSDL definition.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Download the sample &lt;/strong&gt;&lt;a href="ftp://ftp.drivehq.com/rex_hansen/SampleCode/SimpleSOESOAP_CSharp.zip"&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Everything is pretty raw and simple at the moment, but it works. I’m sure there’s a better way to create the WSDL and generate SOAP responses, but that’ll take some additional research. Once the custom SOE is deployed and enabled on a map service, you can use the following url to get the WSDL: http://localhost/arcgis/services/&amp;lt;service name&amp;gt;/MapServer/SimpleSOE_CSharp?wsdl&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3306209722829837644-7137230817143457502?l=rexdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rexdotnet.blogspot.com/feeds/7137230817143457502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3306209722829837644&amp;postID=7137230817143457502' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/7137230817143457502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/7137230817143457502'/><link rel='alternate' type='text/html' href='http://rexdotnet.blogspot.com/2008/11/arcgis-server-expose-custom-server.html' title='ArcGIS Server: Expose a custom server object extension via SOAP'/><author><name>rex hansen</name><uri>http://www.blogger.com/profile/17162176312798283112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_T5Js6sbq8JI/STJscHpuo0I/AAAAAAAAAAo/XqBIYxGy13E/S220/rexfaceclip.PNG'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3306209722829837644.post-3666157480914119084</id><published>2008-10-29T14:44:00.000-07:00</published><updated>2010-06-15T00:47:25.184-07:00</updated><title type='text'>Inaugural Post</title><content type='html'>&lt;span style="font-family:verdana;"&gt;I thought it might be time to start posting a few diatribes on technologies I encounter and wrestle with on a regular basis. Hopefully this blog will introduce some interesting topics related to the mesh of ESRI server technologies, Microsoft products, platforms and components, and just about any other Web standard, protocol, format, API, etc.&lt;br /&gt;&lt;br /&gt;Hope it works :)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3306209722829837644-3666157480914119084?l=rexdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rexdotnet.blogspot.com/feeds/3666157480914119084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3306209722829837644&amp;postID=3666157480914119084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/3666157480914119084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3306209722829837644/posts/default/3666157480914119084'/><link rel='alternate' type='text/html' href='http://rexdotnet.blogspot.com/2008/10/inaugural-post.html' title='Inaugural Post'/><author><name>rex hansen</name><uri>http://www.blogger.com/profile/17162176312798283112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_T5Js6sbq8JI/STJscHpuo0I/AAAAAAAAAAo/XqBIYxGy13E/S220/rexfaceclip.PNG'/></author><thr:total>0</thr:total></entry></feed>
