SOE-动态分段

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

需求:给定一个路径字段、字段值、里程,返回一个点

作者:严瑞(王知方提供技术指导)

1、打开VS2008,新建REST TEMPLATE工程,命名为LineFerencingSOE

2、生成如下工程,打开LineReferencing.cs,LineReferencingSOE继承了四个类: ServicedComponent:如果SOE要注册成COM组件,必须要继承这个类。

IServerObjectExtension:这个类包含Init()和Shutdown()方法,Init()方法是初始化ServerObject,Shutdown()关闭SOE,一般不需要在这两个方法中再写别的代码。

IObjectConstruct:包含一个Construct()方法,当SOE启动的时候会运行这个方法,在这个方法中主是写在SOE运行后需要执行的代码,而不是每次请求需要执行的。比如:获取地图代码,或者你始终操作某一个图层,就可以把获取该图层的代码写在这里。

IRESTRequestHandler:每次请求服务器执行的代码,也就是说你给Server传参后,执行的代码。它下面的CreateRestSchema()方法是创建资源和操作(举个例子说资源和操作:比如FeatureService就是一个资源,而编辑就是它的一个操作),SampleOperHandler()方法是处理请求。

3、先不传任何参数,返回一个测试字符串。上面说了SampleOperHandler()是处理请求的,我们把返回值写到这个方法中,返回值是“Test linereferencing….”,如下,先注释掉有参数传进的代码。

注:参数是从CreateRestSchema()方法中得到的。

4、将该工程重新生成一下,目的是生成\LineReferencingSOE\bin\Debug的LineReferencingSOE.dll文件。

5、用鼠标选中LineReferencingSOE,右键属性:

设置签名密钥:

保存,并重新生成解决方案。

6、将dll文件注册成COM组件(只有注册到COM组件了,才可以注册到ArcGIS

Server中去),打开Visual Studio2008命令提示行:

命令行当前路径指向LineReferencingSOE.dll所在的路径

执行代码:regasm LineReferencingSOE.dll /codebase

7、下面将dll注册到ArcGIS Server中。需要新建一个工程,编写代码注册。新建工程,如下设置:

引入如下几个包:

代码中引入:

8、在Main()函数中编写代码:连接Server,命名扩展服务名

string extensionName = "LineReferencingSOE";是定义了扩展服务的服务名(发布服务时会在ArcCatalog或Manager中的服务类型列表中看到)

9、如果之前注册过同名的SOE,要进行反注册的话,可以用如下的方法:

在命令行中输入“/unregister”参数,

在代码中判断是否进行反注册,该段代码写到Main函数里面

增加一个ExtensionRegistered方法:

继续在Main函数中增加代码:

所有代码如下:

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 LineReferencginSOERegistration

{

class Program

{

static void Main(string[] args)

{

//连接Server

AGSServerConnection agsServerConnection = new AGSServerConnection();

agsServerConnection.Host = "localhost";

agsServerConnection.Connect();

IServerObjectAdmin2 serverObjectAdmin = (IServerObjectAdmin2)

agsServerConnection.ServerObjectAdmin;

string extensionName = "LineReferencingSOE";//扩展服务的服务名(发布服务时会在ArcCatalog或Manager中的服务类型列表中看到)

//检查命令行参数,是否要进行反注册

if (args.Length == 1 && args[0] == "/unregister")

{

// 检查SOE是否已经注册

if (ExtensionRegistered(serverObjectAdmin, extensionName))

{

// 删除SOE

serverObjectAdmin.DeleteExtensionType("MapServer",

extensionName);

Console.WriteLine(extensionName +

" successfully unregistered"); }

}

else

{

// 如果没有注册,则执行如下代码:

if (!ExtensionRegistered(serverObjectAdmin, extensionName))

{

//定义服务的一些属性信息

IServerObjectExtensionType3 serverObjectExtensionType =

(IServerObjectExtensionType3)

serverObjectAdmin.CreateExtensionType();

//找到需要注册的dll,建立的需要注册的Rest工程中的namespace和class的名称

serverObjectExtensionType.CLSID = "LineReferencingSOE.LineReferencingSOE";

//服务描述

serverObjectExtensionType.Description = "Find a Point base on mileage";

//服务名称

= extensionName;

//服务的显示名称

serverObjectExtensionType.DisplayName = "LineReferencingSOE";

.SetProperty("SupportsREST", "true");

.SetProperty("SupportsMSD", "true");

相关文档
最新文档