分析Silverlight跨域呼叫

2022-02-14 16:40:39 字數 2806 閱讀 8715

分析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]

public

string

sayhello(

string

name)

webservice

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...