發表文章

目前顯示的是 11月, 2011的文章

Cross-domain calls for Silverlight apps on self-hosted service

最近開始將一些新的App改用WPF來實作,而在撰寫的過程中也一起試了一下Silverlight,畢竟如果用SL可以搞定的話,Web部屬的方便性還是要比Client-Server一台一台去安裝要來的方便很多的。 而在測試Silverlight的過程中,想起在之前就有看過一些安全性的規定,在跨網域(cross-domain)的狀況下,Silverlight是會被限制存取的;而現在大部分的App後面都帶著一隻Windows Service,並且裝載了WCF Service提供呼叫,所以就優先來測試一下這個部分了。 在進入今天的正題之前,先來看一下在一般的情形下(這裡的一般指的是裝載在IIS上的Service或是網站資源等狀況),Silverlight apps如果需要跨網域去存取資源的話要怎麼做呢? 首先先說一下跨網域,跨網域的意思是什麼呢?比如說Silverlight裝載的位置是http://www.myweb.com/myApp,而開始執行App之後,假設App需要去呼叫位於http://www.othersite.com/xxxx.asmx所提供的Web Service,那麼這個時候的動作就是cross-domain了,那怎麼去處理這個問題呢?首先可以參考一下這篇資料 讓服務可跨網域界限使用 在上面這篇文章可以看到有兩種方式可以處理,加入『clientaccesspolicy.xml』或是『crossdomain.xml』都可以,首先要特別注意的是 不論使用哪個檔案,都必須放置在服務的提供端,而 不是 放在Silverlight app這邊 ,所以如果提供服務的這端如果不是你自己可以控制的,那麼就要聯絡服務端,確認是不是可以開放呼叫的權限,要不就是要另外自行撰寫另外的Service來做中介,一邊向原始來源取得資料,另一邊提供給Silverlight app使用了。 這邊簡單的看一下clientaccesspolicy.xml的內容,檔案內容會長的像是下面這樣 < access - policy > < cross - domain - access > < policy > < allow - from http - request - headers = "SOAP