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極速瀏覽器,當我服務器端沒有策略文件的時候,有時候能夠看到結果,有時候卻有看不到,更換地圖服務後,不在彈出錯誤,但圖有時候顯示,有時候卻又不顯示了。

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