[Silverlight]讀取線上的XML檔案的問題 ----- Day16.2

[Silverlight]讀取線上的XML檔案的問題 ----- Day16.2

今天下午,我的超級損友 - 鄭縮縮在MSN上敲我,說他的淫光(Silverlight)系統直接讀取線上的XML檔案時會產生錯誤。

為了幫忙他,我拋棄了手上重要的工作,忍辱負重地幫他抓蟲(沒辦法,推廣新技術一定要犧牲一下,不然鄭縮縮又會

說這個技術很爛)。

 

剛開他的網頁,就發現在IE瀏覽器的左下角出現找不到物件的錯誤(並未將物件參考設定為物件的執行個體),我嘴角不經意的上揚,

認為鄭縮縮這個問題應該是解決了,我就跟鄭縮縮說,你檢查一下你的程式,看看是不是有哪個物件沒有宣告,導致這個錯誤。

 

但是鄭縮縮說他在本機電腦上可以正確地執行,此時,我不經眉頭一皺,認為鄭縮縮在唬爛我,但是本著「我為淫光,淫光為我」

的精神,我偷偷抓了鄭縮縮的檔案,透過反組譯的程式去看,發現他竟然在Silverlight程式中使用MessageBox,這...該叫我如何以堪。

在發現了這個問題之後,我叫鄭縮縮把這段拿掉,這個錯誤就沒了,但是事情不是你我想像的那麼簡單...Orz

 

鄭縮縮說這時他透過程式讀取XML檔案,會出現安全性限制的錯誤(e.Error    {System.Security.SecurityException --->

System.Security.SecurityException: 安全性錯誤。)。好,看在鄭縮縮以前曾經是我Flash的導師以及是未來合夥人的面子上,看來這個忙

就是LP捏著、洪公在旁邊看著,也要幫到底了。

 

上網查了一下,發現這是Silverlight 2 中的網路安全性存取限制,尤其在MSDN有提到:

對於通訊端,Silverlight 2 中的安全性原則系統會同時影響來源網站和跨網域網路存取。任何來自通訊端的連接即使是回到來源網站,也都需要安全性原則。這與 Silverlight 2 Beta 1 中的行為不同,後者是明確允許通訊端連接至來源網站。

 

然後又有提到:

如果連接要求是從 WebClient 或 HTTP 類別連往跨網域網站,Silverlight 2 執行階段會嘗試使用 HTTP 通訊協定來下載安全性原則檔。Silverlight 2 執行階段會先使用 HTTP 通訊協定,嘗試從受要求的目標網域根目錄下載名為 "clientaccesspolicy.xml" 的 Silverlight 原則檔。

 

看來是要準備一個clientaccesspolicy.xml的原則檔,然後該放在哪裡?

如果直接放在專案目錄底下 ->無效。

放在ClientBin目錄底下呢? ->無效。

 

這個檔案應該放在IIS Server的根目錄底下,也就是說放在wwwroot目錄下(如果你的環境都是預設的情形下)。

檔案內容要寫什麼?

 

詳細說明可以參考資料1:

image

 

image

 

 

放好位置後,測試OK後,我就愉快的下班了....Orz

 

 

參考資料:

1. Silverlight 2 中的網路安全性存取限制: http://msdn.microsoft.com/zh-tw/library/cc645032(VS.95).aspx

2. WebClient and "Security Error" exception:http://silverlight.net/forums/p/10690/49674.aspx

3. Silverlight 2 中的 URL 存取限制:http://msdn.microsoft.com/zh-tw/library/cc189008(VS.95).aspx

4. Silverlight cross domain policy file helpers -

http://timheuer.com/blog/archive/2008/04/06/silverlight-cross-domain-policy-file-snippet-intellisense.aspx

(這個連結資訊很棒!)

 

修煉大會,我們下次見~

 

 

如果您有微軟技術開發的問題,可以到MSDN Forum發問。

如果您有微軟IT管理的問題,可以到TechNet Forum發問喔。