ArcGIS API for Flex制作程序发布后出现错误:"访问 URL 时遇到安全性错误" 解决办法尝试(学习笔记)

问题:

前不久利用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文件内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy> <site-control permitted-cross-domain-policies="all" />
headers="*"/> </cross-domain-pol
<allow-access-from domain="*" /> <allow-http-request-headers-from domain="*"
icy>

尝试失败!


解决方法尝试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更改后内容

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy> <allow-access-from domain="*" secure="false"/>
> </cross-domain-policy>
<allow-http-request-headers-from domain="*" headers="*" secure="false"
/
这时两者都能访问了,我高兴的把secure="false",果然不能访问了,当我以为我找到了真理的时候,于是把secure="false"恢复过来,再尝试,这下我崩溃了,居然两个都不能进行访问了,在尝试了一次又一次之后还是不行,我以为是内存为清理干净,把这些努力都做了之后仍然不行。

最后我重新建立一个地图服务,不管使用哪个crossdomain.xml都能成功了,迷迷糊糊我也不知道到底是怎么解决了问题的,这次经验让我明白了下面这几点:

1)首先需要建立正确的地图服务;

2)然后解决跨域问题,在地图服务器端放入crossdomain.xml策略文件;

3)我觉得浏览器在清理缓存文件上很让人纠结,有时候更改了内容,显示结果仍然不变,要重新弄几次才能改变。就如360极速浏览器,当我服务器端没有策略文件的时候,有时候能够看到结果,有时候却有看不到,更换地图服务后,不在弹出错误,但图有时候显示,有时候却又不显示了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章