天天看點

關于Silverlight的跨域通路問題



 Silverlight5 跨域通路安全錯誤解決方法

在silverlight項目中需要用WebClient 通路其他網站的資源,也就是跨域通路問題,出現了安全錯誤:

e.Error = {System.Security.SecurityException ---> System.Security.SecurityException: 安全性錯誤。

上網百度,知道基本上是由于跨域通路的限制問題。基本上的解決方法都是要加上跨域通路政策檔案,

http://www.silverlightchina.net/html/tips/2012/0918/18965.html 這裡一篇文中介紹:通常,如果基于Silverlight 的應用程式檢測到其請求是一個跨域請求,将首先在 Web 服務的應用程式根處查找 Silverlight 跨域政策檔案 (clientaccesspolicy.xml)。如果這個請求導緻"404 未找到"或其他錯誤,應用程式将在應用程式根處查找 Flash 跨域政策檔案 (crossdomain.xml)。不允許重定向跨域政策檔案。此外,跨域政策檔案保持對應用程式會話有效。

照葫蘆畫瓢,裝上兩個檔案,問題依舊存在。各種可能都試了,還是沒有眉目。

最後使用最簡單原則,按向導建立一個最簡單silverlight 項目,按預設選項進行測試,問題依舊,在項目屬性頁面中看到:

關于Silverlight的跨域通路問題

“在浏覽器内運作需要提升信任”選項預設沒有勾選,就勾上,測試,OK,問題解決。回到開發項目中,看到這一項是勾上的,但是就是不行。高興太早!又是一頭霧水。苦思,一定是項目檔案的設定問題,看到在項目的Properties中缺少一個“InBrowserSettings.xml”檔案,看到裡面内容是設定“在浏覽器内運作需要提升信任”的。将檔案加上還是不行。最後隻有比較兩個項目檔案,搜尋“InBrowserSettings.xml”發現出問題的項目檔案中少了這一行:

<InBrowserSettingsFile>Properties\InBrowserSettings.xml</InBrowserSettingsFile>

立馬加上,運作,OK,通過了。折騰了一天的問題在這裡,不知道為什麼會丢失?隻有微軟知道。項目檔案真是隐藏了很多天機,回想前次設定SilverlightXNA的Content項目也是通過更改項目檔案解決。

繼續閱讀