ArcIMS 连接器--.NET Link 使用方法

简介:
 前几天马维峰写了一篇关于ArcIMS文章——《 浅析ArcIMS 》,主要分析了ArcIMS的基本体系结构和几种二次开发模式的简单对比,比笔者之前的《 ArcIMS体系结构 》分析的透彻许多。

    ArcIMS二次开发,关注最多的无非是它的连接器(connector)和ArcXML。在这些连接器中,Servlet Connector通过纯粹的ArcXML文件来传输请求和响应,ColdFusion Connector在其自身的运行环境中使用自定义tags来产生ArcXML请求和响应,Java Connector和ActiveX Connector比较类似,通过一组API(Java Connector还有标签库)来产生ArcXML请求和响应,它们是面向对象的开发方式,比较符合一般程序员的思维习惯。.NET Link比较特殊,最初我认为它和Java Connector、ActiveX Connector一样,通过一系列API来定义、生成ArcXML文件中的节点与属性,但事实上并非如此,简单来说,它仅仅是对XML文件的一种搭配与 组装,使用.NET Framework中对XML文件的操纵方式拼装出所需的ArcXML请求,并接受ArcIMS应用服务器的响应,其参考手册中只有服务连接和 AxlRequest相关的几个类的说明,也难怪ESRI为什么要给它要取名为.NET Link,而不是.NET Connector。

    离ArcGIS 9.2正式发布已经没有多长时间,.NET Link能否得到改进至少像它的前辈ArctiveX Connector一样还不清楚。.NET Link的这种开发方式使得开发人员需要更多的关注ArcXML_reference,下面将简单说明.NET Link的使用方法。

    首先,需要将.NET Link的程序集引用到开发环境中,我使用的是Visual Studio 2005,需要说明的是ArcIMS 9/9.1 的.NET Link在VS2003和VS2005中都能工作的很好,兼容性不错。这样ESRI.ArcIMS.Server.dll就加入了项目中。
  
    第二步,建立到ArcIMS应用服务器的连接。

using ESRI.ArcIMS.Server
……
ServerConnection connection =  new ServerConnection();
connection.Host = "localhost";
connection.AppServerPort = 5300;
connection.Scheme = Scheme.TCP;

    如果需要建立一个HTTP连接,端口为80,可以将以上语句改为

connection.Scheme = Scheme.HTTP; 
connection.Host = "http://www.yourdomain.com";
connection.URIPort = 80;

    第三步,发送一个ArcXML请求。在.NET Link中发送ArcXML请求,其实质就是对ArcXML文件的一种拼装。
  
//  获取默认的地图服务
connection.ServiceName = "ServerSample";
//  建立一个 XML String,即 axl
string sAXLText;
//  在 sAXLText 中写入定制的 axl 文件
sAXLText = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><ARCXML version=\"1.1\">";
sAXLText = sAXLText + "<REQUEST><GET_IMAGE><PROPERTIES>";
sAXLText = sAXLText + "<IMAGESIZE width=\"300\" height=\"250\"/>";
sAXLText = sAXLText + "<ENVELOPE minx=\"-132.0\" miny=\"25.0\" maxx=\"-57.0\" maxy=\"50.0\" />";
sAXLText = sAXLText + "<LEGEND display=\" false\" />";
sAXLText = sAXLText + "</PROPERTIES></GET_IMAGE></REQUEST></ARCXML>";
string response = conArcIMS.Send(sAXLText);

    最后,需要处理ArcXML响应。

System.Xml.XmlDocument axlResponse =  new System.Xml.XmlDocument();
axlResponse.LoadXml(response); 
if (axlResponse.GetElementsByTagName("OUTPUT").Count == 1)
ExpandedBlockStart.gif
    // 从 ArcIMS 应用服务器响应中获取 "OUTPUT" XmlNode 节点的集合,并且节点只有一个
    System.Xml.XmlNodeList nodeOutput = axlResponse.GetElementsByTagName("OUTPUT");
    // 获取这个节点的 url 属性值
    imageURL = nodeOutput[0].Attributes["url"].Value;
}

    最后获得的imageURL就是之前客户端用户发送请求需要服务器返回的图片地址,用户每次对地图操作后看到的结果,其本质就是一张张图片。

    现在思路比较清晰了,ArcIMS地图服务发布后,其展现的内容主要是由开发中所定制的ArcXML文件的内容所决定,开发人员需要面对大量ArcXML 中的子元素及其属性设置,对于面向对象的开发而言显然是笨了一些,但从原理上来说,还是比较简单的,关键就是要看开发人员对ArcXML文档的熟悉程度 了。
  

    使用.NET Link进行ArcIMS二次开发的过程中,对ArcXML的子元素和属性进行操纵与设置不是一件令人愉快的事,但其中真正的困难还要数客户端大量javascript脚本的应用和数据传递,有机会拿一两个简单例子讨论一下。


本文转自Flyingis博客园博客,原文链接:http://www.cnblogs.com/flyingis/archive/2006/07/30/463510.html,如需转载请自行联系原作者

相关文章
|
5月前
|
开发框架 前端开发 JavaScript
ASP.NET AJAX使用方法概述(三)
ASP.NET AJAX使用方法概述(三)
43 1
|
2月前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】Redisson 连接 Azure Redis出现间歇性 java.net.UnknownHostException 异常
【Azure Redis 缓存】Redisson 连接 Azure Redis出现间歇性 java.net.UnknownHostException 异常
|
2月前
|
Oracle 关系型数据库
Navicat 连接Oracle ORA-28547: connection to server failed, probable Oracle Net admin error
Navicat 连接Oracle ORA-28547: connection to server failed, probable Oracle Net admin error
75 0
|
5月前
|
Linux Windows
FinalShell连接Linux虚拟机报错java.net.ConnectException: Connection timed out: connect(亲测有效)
FinalShell连接Linux虚拟机报错java.net.ConnectException: Connection timed out: connect(亲测有效)
812 0
|
5月前
|
机器学习/深度学习 存储 算法
MATLAB神经网络拟合回归工具箱Neural Net Fitting的使用方法
MATLAB神经网络拟合回归工具箱Neural Net Fitting的使用方法
157 1
|
5月前
java.net.ConnectException: 拒绝连接 (Connection refused) doris
java.net.ConnectException: 拒绝连接 (Connection refused) doris
361 1
|
5月前
|
SQL 数据库连接 数据库
VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤
VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤
237 0
|
网络安全
Hdfs连接报错java.net.ConnectException: Connection timed out: no further information
Hdfs连接报错java.net.ConnectException: Connection timed out: no further information
320 0
|
SQL 数据库连接 数据库
在VS2013平台下,用VB.net 连接Access数据库
从开始学习计算机,我们使用的一直是SQL数据库。这次接触了Access数据库,我将从Access创建到连接向大家分享一下我在Access数据库中的收获。
239 0
|
关系型数据库 MySQL 数据库
NET连接MySQL数据库的CRUD
NET连接MySQL数据库的CRUD
159 0
NET连接MySQL数据库的CRUD