ArcGISServerObjectExtensions.doc_第1页
ArcGISServerObjectExtensions.doc_第2页
ArcGISServerObjectExtensions.doc_第3页
ArcGISServerObjectExtensions.doc_第4页
ArcGISServerObjectExtensions.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ArcGIS Server Object Extensions Step By Step(一)开发环境:MS VS2010ArcGIS Server for .net (10.0)注:软件安装步骤环节请参考网上相关资料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的启动和关闭时被调用。因此我们可以在这里添加读取配置文件和保存配置文件的方法。5、CreateRestSchema方法可以被理解为定义操作的地方,我们需要扩展提供的服务在这里进行定义和添加,它会在这个类被构造时,通过reqHandler = new SoeRestImpl(soe_name, CreateRestSchema() as IRESTRequestHandler;的方式加入到REST接口中。以下代码为我为该类添加的一个操作,OAAnalysis是这个操作暴露出的接口名称,new string Geometry,GeometryType, LyrID 为输入参数的名称,new string html,json,image 为输出结果的格式,OAAnalysisOperHandler为这个对外接口的具体实现方法。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、具体实现方法OAAnalysisOperHandler是我将默认创建的方法SampleOperHandler所进行的一个重命名,它是具体实现内容,它的参数是由RestOperation类约定好的。private byte OAAnalysisOperHandler(NameValueCollection boundVariables, JsonObject operationInput, string outputFormat, string requestProperties, out string responseProperties)7、在这个方法里,我们要做3件事。第一,获得输入;第二,执行操作;第三,输出结果。下面的代码片段1是从输入的JsonObject中获取地理要素Geometry(输入的值在REST API中通过键值对形式传递进来,并转化为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是将执行操作的结果以Json格式的字符串输出。这里你还可以输出Image图形或者Html,以及其他互联网支持的格式(视频、压缩文件、文档等)。代码片段2string outputStr = 执行成功!;JsonObject result = new JsonObject();result.AddString(output, outputStr);return Encoding.UTF8.GetBytes(result.ToJson();8、通过实现了自己的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; / 注销时需要输入参数 if (args.Length = 1 & args0 = /unregister) / 检测是否已经注册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是否已经注册. 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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论