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


?xml version= 
  "1.0" 
  encoding= 
  "utf-8" 
   ?> 
  
 < 
  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指向刚才后台添加的代码。