最近在一个ArcGIS API For Silverlight项目中,出现无法访问本地服务的问题,但是可以使用arcgisonline服务,困扰了好久,一直没得以解决。
今天突然发现直接在浏览器中输入“http://localhost/ArcGIS/rest/services/ChinaData/MapServer?f=jsapi”可以访问该服务:
也就是说本机发布的rest服务是没有问题的,于是继续尝试找出可能的问题,在图层初始化的时候发现图层为空,对图层添加一个事件:InitializationFailed,当图层添加失败的时候会出发这个事件:
<esri:ArcGISDynamicMapServiceLayer Url="http://localhost/ArcGIS/rest/services/ChinaData/MapServer" ID="BaseLayer" InitializationFailed="ArcGISDynamicMapServiceLayer_InitializationFailed" />
code-behind中添加ArcGISDynamicMapServiceLayer_InitializationFailed事件:
private void ArcGISDynamicMapServiceLayer_InitializationFailed(object sender, EventArgs e)
{
Layer layer = sender as Layer;
MessageBox.Show(layer.InitializationFailure.Message);
}
结果弹出图层初始化失败的错误原因:
原来,和flash一样,Silverlight中对跨域(cross domain)访问做了严格的限制,后参照《使服务跨域边界可用》一文,将clientaccesspolicy.xml和crossdomain.xml两个xml文件置于“C:\inetpub\wwwroot”目录中即可,至此,困扰已久的问题终于解决了!
附xml文件下载:wwwroot.rar