ArcGISServerObjectExtensions.doc_第1頁
ArcGISServerObjectExtensions.doc_第2頁
ArcGISServerObjectExtensions.doc_第3頁
ArcGISServerObjectExtensions.doc_第4頁
ArcGISServerObjectExtensions.doc_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

ArcGIS Server Object Extensions Step By Step(一)開發(fā)環(huán)境:MS VS2010ArcGIS Server for .net (10.0)注:軟件安裝步驟環(huán)節(jié)請參考網(wǎng)上相關(guān)資料1、使用VS2010新建項目,選擇ArcGISServer Object ExtensionsRest Template(選擇.net Framework3.5才顯示)2、建立項目后,會有一個cs文件,可以查看到他是繼承自ServicedComponent類和IRequestHandler2、IServerObjectExtension、IObjectConstruct接口。至于ServicedComponent類和IRequestHandler2、IServerObjectExtension、IObjectConstruct接口的具體作用,后面我會再說明。3、打開類我們可以看到它所擁有的方法和成員變量,通常都會使用到的方法:Init()、Shutdown()、CreateRestSchema()、SampleOperHandler(),及成員變量IServerObjectHelper serverObjectHelper。4、在Init方法和Shutdown方法中,我們可以添加初始化對象和釋放對象,他們在MapServer的啟動和關(guān)閉時被調(diào)用。因此我們可以在這里添加讀取配置文件和保存配置文件的方法。5、CreateRestSchema方法可以被理解為定義操作的地方,我們需要擴展提供的服務(wù)在這里進行定義和添加,它會在這個類被構(gòu)造時,通過reqHandler = new SoeRestImpl(soe_name, CreateRestSchema() as IRESTRequestHandler;的方式加入到REST接口中。以下代碼為我為該類添加的一個操作,OAAnalysis是這個操作暴露出的接口名稱,new string Geometry,GeometryType, LyrID 為輸入?yún)?shù)的名稱,new string html,json,image 為輸出結(jié)果的格式,OAAnalysisOperHandler為這個對外接口的具體實現(xiàn)方法。private RestResource CreateRestSchema()RestResource rootRes = new RestResource(soe_name, false, RootResHandler); RestOperation OAAnalysisOper = new RestOperation(OAAnalysis,new string Geometry,GeometryType, LyrID ,new string html,json,image ,OAAnalysisOperHandler); rootRes.operations.Add(OAAnalysisOper);return rootRes;6、具體實現(xiàn)方法OAAnalysisOperHandler是我將默認創(chuàng)建的方法SampleOperHandler所進行的一個重命名,它是具體實現(xiàn)內(nèi)容,它的參數(shù)是由RestOperation類約定好的。private byte OAAnalysisOperHandler(NameValueCollection boundVariables, JsonObject operationInput, string outputFormat, string requestProperties, out string responseProperties)7、在這個方法里,我們要做3件事。第一,獲得輸入;第二,執(zhí)行操作;第三,輸出結(jié)果。下面的代碼片段1是從輸入的JsonObject中獲取地理要素Geometry(輸入的值在REST API中通過鍵值對形式傳遞進來,并轉(zhuǎn)化為operationInput的JsonObject對象)。代碼片段1long? parm1Value;bool found = operationInput.TryGetAsLong(GeometryType, out parm1Value);if (!found | parm1Value=null)throw new ArgumentNullException(GeometryType);JsonObject parm2Value;found = operationInput.TryGetJsonObject(Geometry, out parm2Value);if (!found | parm2Value=null)throw new ArgumentNullException(Geometry);esriGeometryType type = (esriGeometryType)parm1Value;IGeometry queryGeometry = Conversion.ToGeometry(parm2Value, type);下面的代碼片段2是將執(zhí)行操作的結(jié)果以Json格式的字符串輸出。這里你還可以輸出Image圖形或者Html,以及其他互聯(lián)網(wǎng)支持的格式(視頻、壓縮文件、文檔等)。代碼片段2string outputStr = 執(zhí)行成功!;JsonObject result = new JsonObject();result.AddString(output, outputStr);return Encoding.UTF8.GetBytes(result.ToJson();8、通過實現(xiàn)了自己的OperHandler方法后,這個類就算可以編譯了。我們需要使用到VS Tools的命令提示工具注冊編譯后的類庫regasm /codebase。9、通過下面代碼將你的這個程序集信息注冊到ArcGIS Server中。(使用VS建立控制臺程序)using System;using System.Collections.Generic;using System.Linq;using System.Text;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Server;using ESRI.ArcGIS;using ESRI.ArcGIS.ADF.Connection.AGS;namespace FeatureToKMLRegistration class Program static void Main(string args) / Must run as an user in the agsadmin group on the SOM. ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection agsServerConnection = new ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection(); agsServerConnection.Host = localhost; agsServerConnection.Connect(); ESRI.ArcGIS.Server.IServerObjectAdmin2 serverObjectAdmin = agsServerConnection.ServerObjectAdmin as ESRI.ArcGIS.Server.IServerObjectAdmin2; / 擴展類名,和程序集同名 string extensionName = FeatureToKML; / 注銷時需要輸入?yún)?shù) if (args.Length = 1 & args0 = /unregister) / 檢測是否已經(jīng)注冊SOE if (ExtensionRegistered(serverObjectAdmin, extensionName) / 刪除SOE. serverObjectAdmin.DeleteExtensionType(MapServer, extensionName); Console.WriteLine(extensionName + successfully unregistered); else Console.WriteLine(extensionName + is not registered with ArcGIS Server); else / 檢查SOE是否已經(jīng)注冊. if (!ExtensionRegistered(serverObjectAdmin, extensionName) /獲取屬性頁. ESRI.ArcGIS.Server.IServerObjectExtensionType3 serverObjectExtensionType = serverObjectAdmin.CreateExtensionType()as ESRI.ArcGIS.Server.IServerObjectExtensionType3; / 程序集的CLSID. serverObjectExtensionType.CLSID = FeatureToKML.FeatureToKML; /serverObjectExtensionType.CLSID = C41E8674-F186-4a0c-8FC9-AAB7885EFD00; serverObjectExtensionType.Description = Returns KML of a feature at the input location for the input layer; serverObjectExtensionType.Name = extensionName; / 顯示的名稱. serverObjectExtensionType.DisplayName = Feature To KML; / Required to enable exposure of SOE with ArcGIS Server REST endpoint. serverObjectExtensionType.Info.SetProperty(SupportsREST, true); serverObjectExtensionType.Info.SetProperty(SupportsMSD, false); / 注冊SOE.到Server serverObjectAdmin.AddExtensionType(MapServer, serverObjectExtensionType); Console.WriteLine(extensionName + successfully registered with ArcGIS Server); else Console.WriteLine(extensionName + is already registered with ArcGIS Server); Console.ReadLine(); / Checks whether an extension with the passed-in name is already registered with the passed-in server. static private bool ExtensionRegistered (ESRI.ArcGIS.Server.IServerObjectAdmin2 serverObjectAdmin, string extensionName) / Get the extensions that extend MapServer server objects. ESRI.ArcGIS.Server.IEnumServerObjectExtensionType extensionTypes = serverObjectAdmin.GetExtensionTypes(MapServer); extensionTypes.Reset(); / If an extension with a name matching that passed-in is found, return true. ESRI.ArcGIS.Server.IServerObjectExtensionType extensionType = extensionTypes.Next(); while (extension

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論