ArcGIS API for Silverlight是ESRI推出的一个基于Silverlight开发 WebGis 的API,最近开始研究 WebGIS, 成功在程序里访问到本机发布的地图服务,留文一篇,以做参考!
首先配置开发环境。ArcGis Server (.NET版),和以前不同的是,现在ArcGIS 10 版本里, Sde, AE,AGS统一用了一个 SDK, 就是AO的SDK,所以只需安装一个SDK,再根据不同的需求选装不同的runtime。 安装Arcgis Server, VS2010, Expression Blend 4,Silverlight4开发人员版。 最后再安装ArcGis API for Silverlight V2.2.环境搭配成功!
在VS中 新建一个普通的Silverlight应用程序,从工具箱里添加一个Map控件,Map控件默认访问Arcgis Online上发布的地图服务
在xaml.cs文件夹中添加下面这个函数,VS调试。成功访问到ArcGis Online发布的地图服务。
要从远程服务器访问数据,远程服务器需要在 web 服务器的根目录下放置一个 clientaccesspolicy.xml 文件(例如 c:\inetpub\wwwroot)。ArcGIS for Silverlight 以 Microsoft Silverlight 平台为基础进行构建。出于安全方面的原因,不允许 Web 浏览器访问位于 Silverlight 应用程序所属 Web 域之外的数据。但是,如果已从服务器授予了权限,则 Silverlight 应用程序可以跨域加载数据。如果远程服务器上放置了一个 clientaccesspolicy.xml 文件,且此文件允许 Silverlight 连接此远程服务器上的服务,则可以实现跨域加载。
clientaccesspolicy.xml
< access-policy>
< cross-domain-access>
< policy>
< allow-from http-request-headers= "*">
< domain uri= "*" />
< domain uri= "http://*" />
< /allow-from>
< grant-to>
< resource path= "/" include-subpaths= "true" />
< /grant-to>
< /policy>
< /cross-domain-access>
< /access-policy>
crossdomain.xml
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" header=”*” />
</cross-domain-policy>
这里还出了一个小乌龙,我用记事本打开粘贴这两个xml文档还出错了,后来用VS打开重粘了一遍才对。
光把这两个文件绑定到Silverlight上实现跨域访问,还不行,需要在xaml.cs后台代码中添加一个函数
这个时候再观察一遍刚才的前台代码 注释掉的是访问ArcGis online的代码,下面那句是访问本机的,注意ArcGisTiledMapServiceLayer与ArcGISDynamicMapServiceLayer的区别,具体意义大家可以看看教程。 IntializationFaild指向刚才后台添加的代码。
至此,告一段落,调试程序,成功访问