Flyingis

Fusion Center Lab.
posts - 110, comments - 1199, trackbacks - 33, articles - 8

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

Posted on 2006-07-30 21:36 Flyingis 阅读(2815) 评论(29)  编辑 收藏 网摘 所属分类: ArcIMS
    作者:Flyingis

    前几天马维峰写了一篇关于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)

    
// 从 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 @ China
email: dev.vip#gmail.com
blog: http://flyingis.cnblogs.com/

Feedback

#1楼    回复  引用  查看    

2006-07-30 22:47 by 双鱼座      
感觉.NET Link就是一鸡肋。当初我把它当着法宝一样推荐给了我的同事使用。呵呵,结果同事被这个东西折腾个半死。最后换成了System.Net下的对象来通信,既稳定又省事。

#2楼    回复  引用  查看    

2006-07-31 02:00 by edison1024      
靠。。。。我没怎么玩过arcims,不过我看这文章介绍后,这个所谓的.net link简直就是多此一举,画蛇添足。

如果web服务器与应用服务器部署在同一台机器,这多了一层的通讯完全是在走弯路。如果是异地部署,框架里大把通讯类可以轻松完成这种字符串的传送,封装这个ServerConnection没什么营养。而这种看似简单的封装如果在对网络异常考虑不足的时候,用他的人绝对被玩死。

哦?好像楼上和我想的一样,hehe

#3楼    回复  引用  查看    

2006-07-31 02:02 by edison1024      
哦,顺便问一下,有没有谁了解arcims支不支持WMS,WFS

#4楼 [楼主]   回复  引用  查看    

2006-07-31 18:41 by Flyingis      
@双鱼座
不是项目在.net平台下做,我肯定用javaconnector来实现了,.NET Link这种开发方式就是这么笨!

@edison1024
ArcIMS 有 wmsconnector 的支持,用JSP实现的,需要的话我把自带的例子发给你。

#5楼    回复  引用  查看    

2006-08-06 00:24 by edison1024      
哦,不用了,其实我一直在好奇ESRI对OGC规范支持的持一种什么态度,虽然它一只在推动OGC

#6楼 [楼主]   回复  引用  查看    

2006-08-07 22:16 by Flyingis      
一个不恰当的比方,这个就好比之前Oracle支持开源的态度,始终没办法像IBM一样来大力扶持开源,总希望靠开源来推动自己的商业市场。

#7楼    回复  引用    

2007-04-04 20:26 by cindy [未注册用户]
ShapeWorkspace("citiesWorkspace", @"C:\Inetpub\wwwroot\sample_data\NorthAmerica")


例子中有一个这样的函数,不太清楚这个函数是什么意思
是指将NorthAmerica李的.shp文件转换为一个叫citiesWorkspace的workspace吗?


我执行这一段代码之后发现地图上这个图层没有加载上来
不知道是什么原因

而且我并没有在axl文档中发现< MAP dynamic="true" >
所以我把axl文档中这一行给改成这样了,
不知道对不对
请你帮我解释一下
谢谢

#8楼 [楼主]   回复  引用  查看    

2007-04-05 09:26 by Flyingis      
@cindy
1.ShapeWorkspace定义shape数据源的目录。
2.当需要加入新的动态图层时,需要在request中将map dynamic属性设置为true。

#9楼    回复  引用    

2007-04-09 22:00 by cindy [未注册用户]
to flyinggis
使用9.2的控件toc
想达到这样的效果,点击checkbox,想作除了控制图层的显示之外的操作
比如说两个相互叠加的图层就不能同时显示
看到在toc的属性里有OnNodeLegendClicked属性,写了个函数
OnNodeLegendClicked="checkup()"



在javascript里是这样定义的


<script language="javascript" type="text/javascript">
function checkup()
{
for(int i=0;i<10;i++)
{
printf(i);
}
}

</script>


但是每次编译都会出错,说找不到checkuo函数的定义
是怎么回事?

这种OnNodeLegendClicked函数应该怎么定义呢?

esri公司应该包装的就是和html控件差不多的控件吧
我就是按照这种方式来作的啊

#10楼 [楼主]   回复  引用  查看    

2007-04-12 11:43 by Flyingis      
@cindy
"两个相互叠加的图层就不能同时显示"
是两个什么类型的图层呢?点在面上就是很正常的显示方式。

js代码没有printf,只有alert。

#11楼    回复  引用    

2007-06-01 15:30 by 皮皮 [未注册用户]
我在安装arcims9.0的时候,为什么会没有.net link runtime。

#12楼 [楼主]   回复  引用  查看    

2007-06-01 15:34 by Flyingis      
@皮皮
需要先安装visual studio 2003 / 2005

#13楼    回复  引用    

2007-06-01 15:36 by 皮皮 [未注册用户]
我想问一下,为什么在安装arcims9.0的时候,没有.net link runtime这一项啊。因为要用到,所以很急,能不能帮帮忙指点一下啊。谢谢了。

#14楼    回复  引用    

2007-06-01 15:37 by 皮皮 [未注册用户]
我已经安装了visual studio 2005 ,可还是没有啊。

#15楼 [楼主]   回复  引用  查看    

2007-06-01 21:23 by Flyingis      
必须先安装Visual Studio 2005,然后再安装ArcIMS。

#16楼    回复  引用    

2007-06-04 08:57 by 皮皮 [未注册用户]
我的就是先安装了Visual Studio 2005后又安装的ArcIMS。我在别的网站上看到ArcIMS 9要求有.NET Framework 1.1和.NET Framework 1.1 SDK的情况下才能安装.NET Link和开发帮助。是这样吗??我这只有.NET Framework 2.0.没有.NET Framework 2.0 SDK,是不是需要安装.NET Framework 2.0 SDK??还有,安装.NET Framework 2.0 SDK会不会对vs2005的应用造成影响啊。

#17楼    回复  引用    

2007-06-04 09:25 by @皮皮 [未注册用户]
你可能是选择的典型安装,要完全安装才有这个!你可以在安装向导中选择"修改(Modify)",下一步,然后选择点击"Application server connectors",就会看到.net link runtime,选中即可.我也遇到过这种问题,呵呵!

#18楼    回复  引用    

2007-06-04 09:37 by 皮皮 [未注册用户]
你说的是在修改是在安装arcims还是vs2005中??

#19楼    回复  引用    

2007-06-04 09:45 by @皮皮 [未注册用户]
我的qq是26771237,在那里说好了.

#20楼    回复  引用    

2007-06-04 09:53 by 皮皮 [未注册用户]
那要不要安装.NET Framework 2.0 SDK??
我在安装的时候,出现这样的字句:the following features cannot be installed on this machine due to missing dependencies:.net link runtime and developer help.是不是因为没有安装.NET Framework 2.0 SDK??

#21楼    回复  引用    

2007-06-04 09:59 by @皮皮 [未注册用户]
.net 也要安装,否则不叫.net link了,在arcims中有安装.net link中的选项(在server connector 中可以看到),默认是不安装的,要手动选择.

#22楼 [楼主]   回复  引用  查看    

2007-06-04 10:55 by Flyingis      
@皮皮
典型安装里是没有选择.net link的,需要手动选择。你安装了vs2005就会自动安装.net framework sdk 2.0,你安装了vs2005为什么没有sdk呢?

#23楼 [楼主]   回复  引用  查看    

2007-06-05 10:11 by Flyingis      
想起来了,ims9.0需要.net framework sdk1.1

#24楼    回复  引用    

2007-06-10 13:49 by 皮皮 [未注册用户]
我想问一下,怎么把arcims引用的vs2005里面。
哪有arcims中文教材??

#25楼 [楼主]   回复  引用  查看    

2007-06-14 14:00 by Flyingis      
@皮皮
在vs2005中添加引用,在ArcIMS目录中找到.net_link的dll。
中科永生有ArcIMS的中文教材,还有就是各种webgis书籍,最好还是看帮助文档,分析一下blueviewer或htmlviewer的代码。

#26楼    回复  引用    

2007-09-25 00:06 by sdf [未注册用户]
@皮皮

#27楼    回复  引用    

2007-11-13 16:08 by summershasha [未注册用户]
如何将ArcIMS与VS2003连接。我现在找不到ArcIMS怎样用C#来写程序。急于做一个信息服务,需要用C#写程序使ArcIMS发布的网络地图能够获取到数据库中数据,请帮帮忙啊!!

#28楼 [楼主]   回复  引用  查看    

2007-11-16 09:17 by Flyingis      
@summershasha
将.net_link dll动态库添加到vs2003工程中,然后就可以调用连接arcims服务器的方法了,C#主要写的是arcxml。




标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-07-30 22:14 编辑过
Google站内搜索
[推荐职位]上海盛大网络招聘架构师

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》

相关文章:

相关链接: