ArcEngine编写WebService

开发环境:Windows7旗舰版64bit、VisualStudio2008 With SP1、ArcEngine10.0、NetFrameWork4.0、IIS7和C#开发语言。

背景:ArcEngine开发的分析功能同时在dotNet(CS)和Java(BS)中使用,在CS程序中运行正常,但是在BS运行下经常无法获得分析数据,因此想通过写一个WebService的方式进行解决。

因为之前一直做成CS的东西,很少接触BS内容,完全从0写起,因此写起来遇到了不少问题、比较费事。

下面记录下我写的大体过程,希望和我一样的新手可以用到,对于一些问题以及解决过程,将在以后进行说明。

1、新建服务

VS2008->新建->网站->Asp.Net Web 服务。

clip_image002

image

2、编写WebService内部代码与代码调试

打开Service1.asmx文件

找到这一行

   1: [WebService(Namespace = "http://tempuri.org/")]

把NameSpace的值改为  [WebService(Namespace = http://gisAnalysis.org/)]

其中系统自带一个HelloWorld方法,方法之前添加[WebMethod]表示其为可以WEB调用的方法,之后用户可以根据自己的需要编写自己的AE代码。

我自己编写了一个爆管分析的调用方法:

   1: [WebMethod]
   2: public string BrustPipeAnalysis(double x, double y)

3、服务发布

找到IIS默认目录(我电脑目录为“C:inetpubwwwroot”)找到需要发布的服务文件夹。将该文件夹拷贝到需要发布服务的机器的IIS默认目录下面。然后进入IIS:

image

通过添加网站,添加我们拷贝过来的网站即可。

image

点击确定即可添加网站,添加完成后可以通过右键->管理网站->浏览(或者在最左侧的浏览网站image)进行查看。如果正常则表示网站发布成功。

如果页面存在错误,可以通过image进行相应的设置,可以在此修改应用程序池等。

上面是在IIS7.0的情况下进行的,对于IIS6.0版本,还需要进行权限和共享、Web共享以及添加Everyone权限设置。

imageimageimageimage

可以直接在浏览网页上或者在调用程序进行服务测试,发布的服务可以直接在目录下修改其文件代码,修改后立即生效。

4、服务调用

新建一个调用程序工程。然后添加服务引用。

imageimageimage

点击添加web引用按钮,弹出添加web引用窗口。

image

输入地址后点击“前往”按钮,可以前往到该web引用进行查看,没有问题后输入自己的web引用名称点击“添加引用”进行添加即可。

image

调用说明:

   1: WebReference.Service myWeb =new WindowsFormsApplication.WebReference.Service();
   2: myWeb.InitializeLifetimeService();
   3: string strXml = myWeb.BrustPipeAnalysis(0, 0, true);

原先返回值为DataSet,因为在WebService中无法使用其为返回类型,所以将其转化为Xml返回,返回后根据相应的方法将Xml重新转化为所需的DataSet即可。

注意编写WebService,传递参数不能使IFeatureLayer、List等对象,如果存在这些对象要进行序列化与反序列化处理。同时因为是Java调用,所以在参数设置上不能使用ref、out等外部参数等。

 

因为第一次接触因此不可避免的存在一些不足,可能在上面中存在错误或者存在更好的处理方式,如果有什么不当的地方还请大家给指正一下,在这里先谢过了!(*^__^*) 嘻嘻……

原文地址:https://www.cnblogs.com/Jingkunliu/p/3842070.html