分析silverlight跨域呼叫
在silverlight開發的過程中不免要遇到跨域的問題,在這裡以跨域呼叫webservice為例子來分析一下跨域的問題。
先介紹一下我的測試專案,我用flash和silverlight一同來呼叫乙個webservice,乙個flash客戶端,乙個silverlight客戶端,乙個web專案來host flash和silverlight,再加上乙個webservice端。
flash發布到web專案的swf資料夾下。 web專案中的clienttestpage.html中的sl和flash來呼叫webservice。
具體如何呼叫webservice我這裡就略去了。
我的webservice裡有乙個方法
[webmethod]webservicepublic
string
sayhello(
string
name)
html host頁面
這裡先用silverlight來呼叫,在輸入使用者名稱都點選invoke按鈕看看發聲了什麼。
在firefox中開啟firebug的網路監視器
這裡發現他先去webservice所在的域的根目錄下請求乙個 clientaccesspolicy.xml 的檔案,在沒有到後又去請求乙個crossdomain.xml的檔案,同樣也是沒有找到,返回404。
好,這裡我在webservice域根下放入乙個clientaccesspolicy.xml
因為webservice有requestheaders
的請求,所以要加上紅色部分。
再次呼叫看看是什麼情況
請求到了clientaccesspolicy.xml 後就去真正請求webservice檔案了。 並且得到了返回值。
接下來,去掉clientaccesspolicy.xml,加入crossdomain.xml
crossdomain.xml
xml version="再次呼叫1.0"
?>
<
cross
-domain
-policy
>
<
allow
-access
-from domain="
*"/>
cross
-domain
-policy
>
在沒有找到clientaccesspolicy.xml的情況下,去請求crossdomain.xml檔案,得到響應後就正式請求webservice檔案,並且也得到了返回值。
接下來看flash 這裡用as2.0做的。
他一開始直接就請求了crossdomain.xml,並沒有去請求clientaccesspolicy.xml。
再輸入使用者名稱後,直接向webservice post資料,得到返回值。
好接下來看看as3的flash又會如何。
機制有些改變,一開始沒去請求xml。
輸入使用者名稱,呼叫
再看看沒有找到xml的情況
好了在看看網上我搜尋到的一些說法。
「出於安全考慮,flashplayer預設的安全設定是不允許進行跨域操作的。即便是同乙個**,如果用不同的方式訪問,也會被flashplayer認為是跨域操作。
為解決flash/flex系統中的跨域問題,提出了crossdomain.xml跨域策略檔案。有了它,就可以解決跨域問題。」
「silverlight要實現跨域訪問,必須在服務端被訪問域的直接網域名稱下,配置 clientaccesspolicy.xml( 或 crossdomain.xml)檔案,即可以訪問 http:/ 」
提出問題
關於crossdomain.xml 和 clientaccesspolicy.xml 的區別。
1、這兩個檔案真的是可以任選其一嗎?
2、這兩個檔案分別需要被放在服務端還是客戶端?
3、不管後台服務部署在iis還是其它環境中,這兩個檔案都可以使用嗎?
解答
1.silverlight在使用中可以任選其一,建議直接使用clientaccesspolicy.xml。flash只能使用crossdomain.xml。
2.都是必須在服務端被訪問域的直接網域名稱下 。
3.都可以使用
分析Silverlight跨域呼叫
在silverlight開發的過程中不免要遇到跨域的問題,在這裡以跨域呼叫webservice為例子來分析 一下跨域的問題。先介紹一下我的測試專案,我用flash和silverlight一同來呼叫乙個webservice,乙個flash客戶端,乙個 silverlight客戶端,乙個web專案來ho...
Silverlight 呼叫WCF 跨域訪問
跨域訪問,估計是silverlight 呼叫wcf,都會碰到的問題,我也一樣 重點,跨域檔案一定要放對地方,位置一定是http 網域名稱 clientaccesspolicy.xml 這樣可以訪問到才行 這個網域名稱的根目錄的實際訪問目錄下 我們需要把clientaccesspolicy.xml檔案...
Silverlight跨域訪問WCF服務
這可能是由於試圖以跨域方式訪問服務而又沒有正確的跨域策略,或策略不適用於 soap 服務。您可能需要與該服務的所有者聯絡,以發布跨域策略檔案並確保該檔案允許傳送 soap 相關的 http 標頭。出現此錯誤也可能是由於使用的是 web 服務 中的內部型別而沒有使用 internalsvisiblet...