2009-08-28 128 views
2

我正在使用VSTS 2008 + C#+ WCF + .Net 3.5 + Silverlight 3.0。我將Silverlight控件託管在html頁面中,並從VSTS 2008(按F5,然後在VSTS 2008內置的ASP.Net開發Web服務器中運行)進行調試,然後調用另一臺WCF服務(託管在運行IIS 7.0 + Vista的另一臺機器中) 。 WCF服務非常簡單,只需向客戶端返回一個常量字符串即可。WCF跨域策略安全錯誤

當調用從Silverlight的WCF服務,我得到了以下錯誤消息,

,而試圖做出URI「https://LabTest/Test.svc」的請求時發生錯誤。這可能是由於嘗試以跨域方式訪問服務而沒有適當的跨域策略或者不適合SOAP服務的策略。您可能需要聯繫服務的所有者以發佈跨域策略文件,並確保它允許發送與SOAP相關的HTTP頭。使用Web服務代理中的內部類型而不使用InternalsVisibleToAttribute屬性也可能導致此錯誤。有關更多詳細信息,請參閱內部例外。

這是clientaccesspolicy.xml文件,有什麼不對嗎?

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

因此,wcf服務是作爲一個網站構建的,託管在IIS中,clientaccesspolicy位於共享網站的根目錄中? – Johannes 2009-08-28 10:56:29

+0

是的。我發佈的是clientaccesspolicy.xml的內容。我在服務器端使用自簽名證書,這很好嗎? – George2 2009-08-28 13:06:01

+0

我聽說跨域WCF https調用的自簽名證書有一些限制,不確定是否是限制? – George2 2009-08-28 13:06:34

回答

0

這可能是在黑暗中拍攝。但我記得遇到類似的情況在Vista和IIS7上本地設置WCF服務。因爲事實證明,我必須添加一些行到我的web.config文件更具體的baseAddressPrefixFilters,閱讀這篇文章:Here。我有一個問題,因爲我的默認網站有多個主機綁定。它需要*:80和www.mydomain.com:80,WCF不會那麼喜歡。

0

我有類似的問題,但我的解決方案要簡單得多。 在我的clientConfig文件中,我的不同服務的終點地址具有不同的URL。 一些擁有本地主機,一些擁有我的機器在URL中的名稱。 一旦我使他們全部使用本地主機,它解決了我的問題。

0

一個想法可能是使用fiddler並找到請求crossdomainpolicy xml的請求。這是否失敗?檢查它指向的地址。我使用它調試了我的問題。它指向服務器的根目錄,我的crossdomainpolicy xml位於WCF項目文件夾中。