2010-11-17 48 views
5

我將數據發佈到服務器併成功執行BeginGetRequestStream,然後EndGetRequestStream,將我的POST數據寫入填充RequestStream,並調用BeginGetResponse。Silverlight SecurityException

BeginGetResponse成功返回,然後我打電話:

Dim response As HttpWebResponse = CType(MyHttpRequest.EndGetResponse(asynchronousResult), HttpWebResponse) 

此行拋出folloing拋出:SecurityException錯誤:

{System.Security.SecurityException ---> System.Security.SecurityException: Security error.
at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.b__4(Object sendState)
at System.Net.Browser.AsyncHelper.<>c__DisplayClass2.b__0(Object sendState)

--- End of inner exception stack trace ---
at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at EtsyV2NetSL.WebQuery.POST_ResponseCallback(IAsyncResult asynchronousResult)}

所以,我首先想到的是,我正在阻止他們clientaccesspolicy服務器.xml或crossdomain.xml。我已經發射了小提琴手,看到以下內容:

GET http://openapi.etsy.com/clientaccesspolicy.xml > 596 (text/xml) 
GET http://openapi.etsy.com/crossdomain.xml > 200 OK (application/xml) 

所以我檢查了他們的crossdomain.xml和設置顯示OK:

<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> 
<cross-domain-policy> 
    <allow-access-from domain="*"/> 
</cross-domain-policy> 

我已經打了一個死衚衕,試圖解決這個問題問題。我正在VS開發機器上運行測試應用程序。

有沒有人有任何想法,爲什麼Silverlight會拋出這個錯誤?

感謝

回答

1

我今天處理一個非常類似的問題 - 然而,而不是一個HTTP POST,我試圖做一個WCF服務調用。

下面是我放在我的代碼中的評論 - 請讓我知道,如果它不夠清楚是有幫助的。

// NB: Cross-domain bug 
// If you end up here with a System.Security.SecurityException "Security error." 
// Check that you're not trying to cross zones when making a service call 
// (eg: Accessing Trigger Driver TimeSource service on http://IASWEB01/ when accessing the site via usertest.local 
// or any other URI with dots in it - yes it seems crazy) 

這似乎是一些安全'功能'。即使在Silverlight客戶端試圖從目標主機獲取clientaccesspolicy.xml之前,通過WCF調用,我還是得到了這個異常。非常惱人的問題沒有一個真正的解決方案!

+0

正如您可以從我的Fiddler跟蹤中看到的,Silverlight檢查並找到'向後兼容'策略文件。所以我可以非常愉快地跨域發出GET命令。但是,我正在與第三方公司合作,無法控制所使用的策略文件。我使用WinForms/ASP.NET/WPF的代碼很好,我調整了Silverlight的代碼,但遇到了安全性異常錯誤。從Silverlight看來,它在發送響應時發送正確和錯誤,但是在執行查找時發現的數據未找到。所以POST/PUT方法拋出安全異常。 – Graeme 2010-11-18 21:38:38

+0

你可以看到小提琴出來的POST嗎?在我看來,問題仍然存在,即:在http請求完成或甚至完全構建之前發生故障。 – bszom 2010-11-19 07:50:21

+1

Fiddler沒有抓住POST - 所以不能告訴。 – Graeme 2010-11-21 13:26:51

相關問題