Silverlight跨網域存取

有摸Silverlight的朋友想必都知道存取後端要透過服務代勞,無法像傳統ASP.NET直接連接DB,在網站與服務架設完成後,多數人常會遇到cross domain的問題,此時要在clientaccesspolicy.xml中設定跨網域資訊,允許哪些網域的Silverlight可以存取服務!想當然爾,clientaccesspolicy.xml要放在服務這邊,但是不少人測試時把服務、Silverlight放在本機,可能不會注意到此細節喲!

< ?xml version="1.0" encoding="utf-8"?>
< access-policy>
  < cross-domain-access>
    < policy>
      < allow-from http-request-headers="*">
        < domain uri="*"/>
      < /allow-from>
      < grant-to>
        < resource path="/" include-subpaths="true"/>
      < /grant-to>
    < /policy>
  < /cross-domain-access>
< /access-policy>

< domain uri="*"/>是指定可以通過的網域,這邊耍懶就讓所有網域內的Silverlight都可存取本地服務:p

另一個重點是clientaccesspolicy.xml要放哪裡?
引據董大偉老師Silverlight範例權威講座2.0,此檔必須放在網站根目錄,摘錄如下
網站的根目錄指的並不是是虛擬目錄的根目錄,倘若你的網站是虛擬目錄,你放在虛擬目錄的根目錄(就是和Web.config同一個目錄)下是無效的,你需要把.xml檔案放到該虛擬目錄所屬的網站的根目錄下才有效。
舉個例子簡單來說:WCF的實際的網站路徑在D:\test\AA,同時也於IIS以虛擬目錄方式發佈服務,若是clientaccesspolicy.xml放在D:\test\AA是沒有用的,
請務必將.xml放在IIS目錄下!就一般情況放在C:\Inetpub\wwwroot即可!


btw存取ESRI之Map Service也一樣,將.xml放在C:\Inetpub\wwwroot即可!

沒有留言: