1. 程式人生 > >ArcGIS API for Flex製作程式釋出後出現錯誤:"訪問 URL 時遇到安全性錯誤" 解決辦法嘗試(學習筆記)

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.cnblogs.com/litou/archive/2011/10/28/2227929.html

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