我正在将数据发布到服务器并成功执行BeginGetRequestStream,然后是EndGetRequestStream,将我的POST数据写入填充RequestStream,并调用BeginGetResponse。
BeginGetResponse成功返回,然后我调用:
Dim response As HttpWebResponse = CType(MyHttpRequest.EndGetResponse(asynchronousResult), HttpWebResponse)
此行抛出以下SecurityException错误:
{System.Security.SecurityException ---> System.Security.SecurityException:安全错误。
在System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
在System.Net.Browser.BrowserHttpWebRequest。<> c__DisplayClass5.b__4(Object sendState)
在System.Net.Browser.AsyncHelper。<> c__DisplayClass2.b__0(Object sendState)---内部异常堆栈跟踪结束---
在System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,Object state)
在System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
在EtsyV2NetSL.WebQuery.POST_ResponseCallback(IAsyncResult asynchronousResult)}
所以我的第一个想法是我被服务器用clientaccesspolicy.xml或crossdomain.xml阻止了。我已经解雇了Fiddler并看到了以下内容:
GET http://openapi.etsy.com/clientaccesspolicy.xml > 596 (text/xml)
GET http://openapi.etsy.com/crossdomain.xml > 200 OK (application/xml)
所以我检查了他们的crossdomain.xml,设置显示正常:
<!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会抛出这个错误?
由于
答案 0 :(得分:1)
我今天处理了一个非常类似的问题 - 但是我试图进行WCF服务调用而不是HTTP POST。
以下是我在我的代码中发表的评论 - 如果不清楚有用,请告诉我。
// 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)
这似乎是一些安全'功能'。通过WCF调用,我甚至在Silverlight客户端尝试从目标主机获取clientaccesspolicy.xml之前就遇到了此异常。在没有真正解决方案的情况下非常恼人的问题!
答案 1 :(得分:1)