代码改变世界

ArcGIS API For Silverlight中关于跨域错误的解决办法

2011-06-21 14:01  何朝阳  阅读(858)  评论(0编辑  收藏  举报

最近在一个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