The Kentucky Transportation Cabinet’s use of Server Object Extensions (SOEs) Scott Dickison, GISP Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps This morning’s topics: • What is a Server Object Extension (SOE)? • How do you… • Write a SOE? • Use a REST SOE in a .NET application? • How is the Transportation Cabinet using SOE’s with ArcGIS Server 10.0? Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps What on Earth are you talking about? Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Spatially Enabled Web Services! SOE’s extend the capabilities of your ArcGIS Server map services beyond just data display and query. Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps ♫♫♪ The Circle of Life Data ♫♫♪ Service Request MAP Service/SOE Web Client Custom Class DESERIALIZER Kentucky Transportation Cabinet GIS Branch Serialized Data Application SDE & Other Databases http://transportation.ky.gov/maps REST Service Request URL http://someserver.somewhere.org/ArcGIS/rest/s ervices/MeasuredRoute/MapServer/exts/KYTCGI SREST/GetRouteInfo?X=5164738.4563+&Y=3893 182.2452+&SearchRadius=10&f=pjson • Programmatically constructed and submitted by the application Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Serialized JSON or XML Output Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps SOE Basics • Can be developed for REST or SOAP Access • KYTC has chosen to write them as REST services • Can be written in .NET or Java • Provide access to the full suite of ArcObjects Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps SOE Basics • Need to be deployed to all of a site’s ArcGIS Servers in multi-server configurations • This TOTALLY changes at 10.1! • Return information is in JSON but can be written to return other data formats. • KYTC offers both JSON and XML Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Advantages of a SOE • Fast! • Low server overhead • SOE’s live and die with the map service they’re attached to • No performance hit for having to spin up an instance of the SOE when a request is made • Easily accessible • Can be accessed by any client that is able to make the request Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps When do you need a SOE? • ArcGIS Server applications • When desired functionality is not available to the Silverlight, JavaScript, or Flex APIs. • Traditional .NET applications… • When an application needs some spatial functionality but the application itself cannot be written with ArcObjects Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps When do you need a SOE? • Other considerations… • Geoprocessing services have a large memory footprint when compared to a SOE – especially for complex tasks • If the task is complex and is going to be heavily utilized you’ll want to use a SOE. Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps How are SOE’s written? Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Development • Prerequisites: • Knowledge of .NET or Java development • Knowledge of ArcObjects • Use the templates! • ESRI has provided a SOAP and a REST Visual Studio project template to get you started. Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Development • Building blocks of an SOE • Resources • Information returned back from the server for use by an operation – • ESRI says to think of this as a read-only property Operations • Something you ask the server to do with a resource • Every SOE has at least one resource and one operation even if the resource doesn’t return anything Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Development • The RestResource class • • SOE Operations are associated with a RestResource Arguments • • • • The SOE’s name Collection? The Resource Handler Capabilities (optional) – A way to group subsets of operations • Note: Capabilities are called “Allowed Operations” when looking at the Capabilities tab under Service Properties in ArcCatalog. Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Development • The CreateRestSchema function • Returns a RestResource Class • This is where you define the SOE’s operations (RestOperation class) Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Development • The REST Resource Handler • Byte Array • An array of raw data • Returns information from the server back to the SOE for use by an operation • For KYTC’s Server Object Extensions we’ve set it up to not return anything Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Development • The RestOperation Class • An individual operation in a SOE • Identifies which Operation Handler will be invoked • Specifies inputs • Specify output types • Optionally specify a capability Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Development • The Rest Operation Handler • Byte Array • Handles and validates inputs • Where you should execute any ArcObjects code (here or in helper methods) • Formats output in the specified format Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Development • Signing the assembly • Signing the assembly with a strongly named key will let you place the assembly in the server’s GAC Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Development • Testing • Once deployed an HTML Page is generated for the SOE in the REST services directory of the map service it is attached to Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Using SOE’s in a .NET Application Using SOE’s in a .NET Application • Making the request • The WebClient Class… • Constructing the URL... • The OpenReadCompleted event handler Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Using SOE’s in a .NET Application • The WebClient Class • Provides common methods for sending data to and receiving data from a resource identified by a URI. (MSDN web site) • Constructing the URL • Programmatically construct the entire call and provide it to the WebClient Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Using SOE’s in a .NET Application • The OpenReadCompleted event handler • Synchronous or Asynchronous Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Using SOE’s in a .NET Application • Deserializing SOE output • Creating a Class to hold the output • http://json2csharp.com/ • The DataContractJsonSerializer Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps How is KYTC utilizing SOE’s? Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps KYTC • Silverlight Control • Searching for a route Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps KYTC • Permitting (KEPT) • When a permit location is added, moved, or deleted the corresponding point is acted upon in SDE • Generate a list of all roads within a mile of a permit Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps KYTC • Rail Crossing Inventory (RCI) • • • Return detailed route information based on a spatial query Return location information in terms of County, Route, and Mile point. Data synchronization • When a rail crossing is updated in the RCI database the corresponding location is moved in SDE • Project Manager’s Toolbox • A SOE is used to return the boundaries of a project which is, in turn, used to zoom to the project extent. Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps KYTC GIS Branch Goals • Integration with application developers • • Deploy a spatially enabled application that is a joint effort between the GIS Branch and Application Development by the end of 2012. (DONE!) Deploy a spatially enabled application that is solely developed by Application Development with the GIS Branch only in an advisory role by the end of 2013. • Replace existing web services with SOEs • ArcGIS server 10.1 no longer supports local connections Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Questions? Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps Contact us: email: KYTCGISTeam@ky.gov Server Object Extension link: http://maps.kytc.ky.gov/ArcGIS/rest/services/M easuredRoute/MapServer/exts/KYTCGISREST Kentucky Transportation Cabinet GIS Branch http://transportation.ky.gov/maps