问题:
前不久利用ArcGIS API for Flex做了一个程序,在Flash Builder中运行时能够正常显示地图,并不报出错误,然后利用IIS发布后进行浏览就出现错误[RPC Fault faultString="访问 URL 时遇到安全性错误" faultCode="Channel.Security.Error" faultDetail="目标:DefaultHTTP"]。
我的地图服务的url是"http://LXP/arcgis/rest/services/大连/MapServer",我发布的web服务的url是"http://localhost/ArcGIStest/ClassBreakRender.html",处于不同的域,如果把web服务的域名更改为LXP就不会出现错误,这让我想到了跨域。但该如何解决呢?
解决方法尝试1:
我认为应该是安全沙箱的问题,于是我就将一个crossdomain.xml文件放在了ArcGIS Server的地图服务的服务端文件夹C:\Inetpub\wwwroot下,仍然出现错误,在网上翻阅了各种各样的解决办法,始终没能解决掉。为方便理解我将下面的解决方法的链接放在下面:
安全沙箱的问题和解决办法汇总http://www.memosite.net/share/267/
Flex Builder中网络监视器导致“访问URL时遇到安全性错误”
http://www.cnblogs.com/litou/archive/2011/10/28/2227929.html解决Flex跨域"访问URL时遇到安全性错误
http://wangjianwei866.blog.163.com/blog/static/929582320110844142318/crossdomain.xml文件内容如下:
尝试失败!
解决方法尝试2:
后来我发现我在Flash Builder中调试所用的浏览器和web服务器浏览时所用浏览器不同,而且两者的Flash 版本也存在差异,
调试IE浏览器Adobe Flash Player 10.3.183.7
web服务360极速浏览器(Chrome)Adobe Flash Player 11.0.1.152
当我在调试时并不会出现错误,而进入360极速浏览器就出现错误.
这儿有两种可能,一是浏览器差异导致的错误,另外一个是Adobe Flash Player版本不同导致,为了测试出问题到底出在哪儿,
于是我将web发布后的地址粘贴至IE浏览器中,发现并不会出现错误,我开始怀疑是浏览器的问题了。然后我将IE浏览器重Adobe Flash Player的版本升级至11.0.1.152,与360极速浏览器一致,将地址再次粘贴到IE浏览器中,哈哈问题出现了,终于弹出一个安全沙箱的错误:“安全沙箱冲突:http://localhost/ArcGIStest/ClassBreakRender.swf 不能从 http://LXP/arcgis/rest/services/大连/MapServer?f=json 加载数据。”,这就排除了浏览器的问题了,Adobe Flash Player版本升级至11以上就出现这种问题,难道是11的安全沙箱级别别比10更严格了。后来在高手的指导下修改了策略文件crossdomain.xml的内容,如下:
crossdomain.xml更改后内容
最后我重新建立一个地图服务,不管使用哪个crossdomain.xml都能成功了,迷迷糊糊我也不知道到底是怎么解决了问题的,这次经验让我明白了下面这几点:
1)首先需要建立正确的地图服务;
2)然后解决跨域问题,在地图服务器端放入crossdomain.xml策略文件;
3)我觉得浏览器在清理缓存文件上很让人纠结,有时候更改了内容,显示结果仍然不变,要重新弄几次才能改变。就如360极速浏览器,当我服务器端没有策略文件的时候,有时候能够看到结果,有时候却有看不到,更换地图服务后,不在弹出错误,但图有时候显示,有时候却又不显示了。