C# Silverlight HttpWebRequest安全性异常 问题
我有一个在远程服务器上运行的restful web服务。我已经做了一个WP7应用程序,使用它,所以我知道它的工作。我将应用程序移植到Silverlight web应用程序时遇到了问题 我已经包括了代码的简化版本以及抛出的错误。在C# Silverlight HttpWebRequest安全性异常 问题,c#,silverlight,web-applications,silverlight-4.0,httpwebrequest,C#,Silverlight,Web Applications,Silverlight 4.0,Httpwebrequest,我有一个在远程服务器上运行的restful web服务。我已经做了一个WP7应用程序,使用它,所以我知道它的工作。我将应用程序移植到Silverlight web应用程序时遇到了问题 我已经包括了代码的简化版本以及抛出的错误。在EndGetResponse方法上抛出错误 请随时询问更多信息。我四处寻找解决方案,但没有找到任何有效或真正适用于我的问题的方法。它看起来像是如此简单的代码,在WP7版本上工作得非常完美。任何帮助都将不胜感激 代码 错误 用户代码未处理SecurityException
EndGetResponse
方法上抛出错误
请随时询问更多信息。我四处寻找解决方案,但没有找到任何有效或真正适用于我的问题的方法。它看起来像是如此简单的代码,在WP7版本上工作得非常完美。任何帮助都将不胜感激
代码
错误
用户代码未处理SecurityException
System.Security.SecurityException:安全错误
at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState)
at System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>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 ServieTest.MainPage.RequestCallback(IAsyncResult asyncResult)
at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClassd.<InvokeGetResponseCallback>b__b(Object state2)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
位于System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
在System.Net.Browser.BrowserHttpWebRequest.c__DisplayClass5.b__4(对象发送状态)中
在System.Net.Browser.AsyncHelper.c__DisplayClass4.b__0(对象发送状态)中
---内部异常堆栈跟踪的结束---
位于System.Net.Browser.AsyncHelper.BeginNoui(SendOrPostCallback beginMethod,对象状态)
位于System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
在ServiceTest.MainPage.RequestCallback(IAsyncResult asyncResult)上
在System.Net.Browser.BrowserHttpWebRequest.c__DisplayClassd.b__b(对象状态2)中
位于System.Threading.QueueUserWorkItemCallback.WaitCallback_上下文(对象状态)
在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,ContextCallback回调,对象状态,布尔ignoreSyncCtx)
位于System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()处
在System.Threading.ThreadPoolWorkQueue.Dispatch()中
在System.Threading.\u ThreadPoolWaitCallback.PerformWaitCallback()中
根据,Silverlight(浏览器中)尊重您请求数据的服务器的名称。由于它是您自己的web服务,您可以将crossdomain.xml
文件添加到应用程序的根目录中,以允许外部域发出跨域请求(per)。事实证明,我需要在服务域的根目录中添加clientaccesspolicy.xml
文件
以下是文件的内容:
<?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>
silverlight实现在浏览器外运行时是否有效?我看到了这两篇文章,但我认为这不是服务的问题,因为WP7应用程序使用它(Android和iPhone应用程序也使用它)。该服务是围绕一个简单的HttpListener
构建的。我可以尝试添加crossdomain.xml
文件,但我真的不知道如何让它驻留在域的根目录下。如果服务驻留在根目录下(http://some-example-restful-service:5600/
)然后您可以检查HttpListenerRequest.Url
中的“crossdomain.xml”
并使用适当的XML进行响应。WP7不检查跨域策略,因为WP7应用程序没有源代码且被认为是可信的。好的,我在域的根目录下有crossdomain.XML
文件,如果我用浏览器访问它,就可以看到它,但是我还是遇到了这个应用程序的例外。我不确定为什么crossdomain.xml
文件没有解决这个问题,但是你的解决方案确实帮助我弄清楚了我必须做什么,我把它作为另一个解决方案发布了。
<?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>