ArcIMS 连接器--.NET Link 使用方法
发布日期:2021-10-01 08:44:37 浏览次数:1 分类:技术文章

本文共 2654 字,大约阅读时间需要 8 分钟。

    作者:    
    前几天马维峰写了一篇关于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应用服务器的连接。
None.gif
using
 ESRI.ArcIMS.Server
None.gif……
None.gifServerConnection connection 
=
 
new
 ServerConnection();
None.gifconnection.Host
=
"
localhost
"
;
None.gifconnection.AppServerPort 
=
 
5300
;
None.gifconnection.Scheme 
=
 Scheme.TCP;
    如果需要建立一个HTTP连接,端口为80,可以将以上语句改为
None.gif
connection.Scheme 
=
 Scheme.HTTP; 
None.gifconnection.Host 
=
 
"
http://www.yourdomain.com
"
;
None.gifconnection.URIPort 
=
 
80
;
    第三步,发送一个ArcXML请求。在.NET Link中发送ArcXML请求,其实质就是对ArcXML文件的一种拼装。
  
None.gif
//
 获取默认的地图服务
None.gif
connection.ServiceName 
=
 
"
ServerSample
"
;
None.gif
//
 建立一个 XML String,即 axl
None.gif
string
 sAXLText;
None.gif
//
 在 sAXLText 中写入定制的 axl 文件
None.gif
sAXLText 
=
 
"
<?xml version=\
"
1.0
\
"
 encoding=\
"
UTF
-
8
\
"
?><ARCXML version=\
"
1.1
\
"
>
"
;
None.gifsAXLText 
=
 sAXLText 
+
 
"
<REQUEST><GET_IMAGE><PROPERTIES>
"
;
None.gifsAXLText 
=
 sAXLText 
+
 
"
<IMAGESIZE width=\
"
300
\
"
 height=\
"
250
\
"
/>
"
;
None.gifsAXLText 
=
 sAXLText 
+
 
"
<ENVELOPE minx=\
"
-
132.0
\
"
 miny=\
"
25.0
\
"
 maxx=\
"
-
57.0
\
"
 maxy=\
"
50.0
\
"
 />
"
;
None.gifsAXLText 
=
 sAXLText 
+
 
"
<LEGEND display=\
"
false
\
"
 />
"
;
None.gifsAXLText 
=
 sAXLText 
+
 
"
</PROPERTIES></GET_IMAGE></REQUEST></ARCXML>
"
;
None.gif
string
 response 
=
 conArcIMS.Send(sAXLText);
    最后,需要处理ArcXML响应。
None.gif
System.Xml.XmlDocument axlResponse 
=
 
new
 System.Xml.XmlDocument();
None.gifaxlResponse.LoadXml(response); 
None.gif
if
 (axlResponse.GetElementsByTagName(
"
OUTPUT
"
).Count 
==
 
1
)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
InBlock.gif    
// 从 ArcIMS 应用服务器响应中获取 "OUTPUT" XmlNode 节点的集合,并且节点只有一个
InBlock.gif
    System.Xml.XmlNodeList nodeOutput = axlResponse.GetElementsByTagName("OUTPUT");
InBlock.gif    
// 获取这个节点的 url 属性值
InBlock.gif
    imageURL = nodeOutput[0].Attributes["url"].Value;
ExpandedBlockEnd.gif}
    最后获得的imageURL就是之前客户端用户发送请求需要服务器返回的图片地址,用户每次对地图操作后看到的结果,其本质就是一张张图片。
    现在思路比较清晰了,ArcIMS地图服务发布后,其展现的内容主要是由开发中所定制的ArcXML文件的内容所决定,开发人员需要面对大量ArcXML中的子元素及其属性设置,对于面向对象的开发而言显然是笨了一些,但从原理上来说,还是比较简单的,关键就是要看开发人员对ArcXML文档的熟悉程度了。
  
    使用.NET Link进行ArcIMS二次开发的过程中,对ArcXML的子元素和属性进行操纵与设置不是一件令人愉快的事,但其中真正的困难还要数客户端大量javascript脚本的应用和数据传递,有机会拿一两个简单例子讨论一下。

转载地址:https://blog.csdn.net/iteye_263/article/details/81379549 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:正则表达式--JavaScript 实现基础
下一篇:ArcIMS 连接器--.NET Link 使用方法

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年03月23日 18时01分45秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

MongoDB-1-基础介绍 2021-06-23
vscode 不能使用中文输入法_vscode中vim插件设置 2019-04-21
matlab dwt2(),MATLAB小波变换指令及其功能介绍(超级有用) 2019-04-21
php sequelize,egg.js整合数据库ORM框架Sequelize 2019-04-21
php+跑buth,php 中函数获取可变参数的方法, 这个语法有点像 golang 语言中的 2019-04-21
oracle自己运行,创建Oracle自动执行Job 2019-04-21
oracle报错00020,oracle启动 ORA-00020: maximum number of processes (%s) exceeded错误 2019-04-21
chmod 赋权所有_chmod 权限 命令详细用法 2019-04-21
html代码翻译_[译]您知道 HTML 的键盘标签吗? 2019-04-21
html抽奖代码_JavaScript高手之路:封装抽奖效果 2019-04-21
hadoop 3.3 一直停留在running wordcount_蛋价持续下跌,今日跌破3.3元大关!深秋季节价格还能反弹吗?... 2019-04-21
的流程图做完后如何保存_2019超火的半永久眉是哪款?做完后我们如何护理?... 2019-04-21
去除logo 高德地图api_深圳品牌logo升级如何保持原型的同时更具创新? 2019-04-21
二重积分转换成极坐标_二重积分转换极坐标r的范围如何确定? 2019-04-21
python中倒背如流_八字基础知识--倒背如流篇 2019-04-21
以太坊地址和公钥_以太坊地址是什么 2019-04-21
linux查看wifi信号命令_linux – 获取WIFI信号强度 – 寻求最佳方式(IOCTL,iwlist(iw)等)... 2019-04-21
npm 不重启 全局安装后_解决修复npm安装全局模块权限的问题 2019-04-21
vs格式化json 不生效_vs code 格式化 json 配置 2019-04-21
go 字符串反序列化成对象数组_Fastjson 1.2.24反序列化漏洞深度分析 2019-04-21