本文将讨论如何用.NET Link定制ArcIMS的客户端。ArcIMS 9要求有.NET Framework 1.1和.NET Framework 1.1 SDK的情况下才能安装.NET Link和开发帮助。
为什么要使用.NET Link
有了.NET Link,与ArcIMS的交互可使用.NET语言,如VB.NET或C#。Active Server Pages .NET (ASP.NET)是使用.NET构建网页的技术。与JavaScript等在客户端执行代码不同,.NET的代码在服务器端执行,这带给开发者诸多好处。
第一,实际上,通过Internet只传送服务器端代码执行的结果。这样支持瘦客户端,减少客户端处理和网络下载的时间。
第二,服务器端代码有权限可以访问服务器的文件系统和数据库。如果开发者需要创建一个根据用户在地图上的点击,向数据库添加新信息的网站,就必须要在服务器端进行处理。与其它的WEB开发环境相比,ASP.NET的好处是由Visual Studio .NET等开发环境提供的事件驱动机制。在Visual Studio .NET中写代码很简单,例如只用把按钮拖动到表单(form)上,再写点击该按钮后在服务器端执行的代码。而表单如何传递到服务器,如何运行代码等细节都由事件驱动机制来处理。
使用.NET Link
虽然.NET Link有几个对象可用于接发ArcXML,或产生几个预定义的ArcXML请求,但最主要的对象是ServerConnection。ServerConnection可定义到应用服务器(Application Server)和ArcIMS服务(Service)的连接,用于接发请求。Listing 1中用了ServerConnection。
图1 采用ServerConnection的send方法发送ArcXML请求
要发送一个ArcXML请求,使用ServerConnection的send方法:conn.Send(sAXL) sAXL变量是包含完整ArcXML请求的字符串。AXLRequests对象可创建几个预定义的ArcXML请求,如针对全图范围的GET_SERVICE_INFO,GETCLIENTSERVICES和GET_IMAGE。
创建和解析ArcXML
要使用.NET Link,开发者必须要创建ArcXML请求和处理ArcXML响应。文章ArcXML Programmer’s Reference Guide提供解析ArcXML的语法。.NET中很多对象可帮助我们实现XML的产生和解析。字符串可合并或用StringBuilder对象来创建。XMLDocument对象可表示整个响应,响应中的每个元素(element)表示为一个节点(node)。节点由元素、属性和所有的子元素组成。Listing 2中,ServerConnection用于发送ArcXML请求,得到的响应放在XMLDocument对象中。
XMLNodeList可用于得到特殊元素的集合,如Listing 3。当创建了XMLNodeList,可通过item属性(缺省的属性)来访问某个节点。可访问每个节点的所有子节点(子元素)和属性。如果发送GET_IMAGE请求,得到新图片URL的代码如Listing 4。
通过.NET Link创建一个简单地图
下面说明如何创建有地图的简单页面。这个例子的前提是ArcIMS和.NET Link安装在一起,名为sample的Image Service(图像服务)和Visual Studio .NET都在运行。sample服务使用的数据是全球(国家)的地理坐标的数据。
图2 创建展示地图的区域,从Web Forms分类中拖放图片。改变地图ID属性为theMap
1. 在Visual Studio.NET中,新建一个ASP.NET的Web application。本例子用VB.NET写成。
2. 添加ESRI ArcIMS.NET Link引用
3. 生成显示地图的区域。从工具箱的Web窗体中拖放image,设置ID为theMap
4. 在该页的代码中参照Listing 5中的代码添加一个函数,生成新地图并返回URL。
5. 将Listing 6中的代码加到Page_Load函数中,生成新图片,更新theMap的URL。测试该Web application。点击Visual Studio.NET中的启动按钮,会显示一幅全球地图。
状态维护
上个例子没有提供与用户交互的工具。当添加了工具后,Web application的状态维护就是一个问题。例如,添加缩放工具改变地图的范围,就要求代码“记住”当前的范围,在实现下一步的缩放的时候使用。有几种方法来维护地图的状态,包括hidden inputs、cookies、session变量和ViewState。
ViewState记录HTML返回客户端的状态信息,那么服务器就不用象使用session变量那样消耗资源来维护每一个Web客户端的状态。
使用BlueViewer
BlueViewer是ArcIMS安装光盘中自带的一个例子,可让我们更快入门.NET Link Web applications的开发。它构建了基本的功能:固定或动态缩放,如缩放到矩形框的范围;图例;大/小图切换,重新放置到中心;打印和显示x,y坐标。BlueViewer使用hidden inputs来存储状态信息。
更多信息
请参考在线的www.esri.com/arcims和Customizing ArcIMS—Using .NET Link上的ArcIMS 9 Architecture and Functionality白皮书。ArcIMS ESRI Software Documentation Library也收录了这篇文章。