Silverlight HttpWebRequest安全异常

本文关键字:异常 安全 HttpWebRequest Silverlight | 更新日期: 2023-09-27 18:16:04

问题

我有一个在远程服务器上运行的restful web服务。我已经制作了一个使用它的WP7应用程序,所以我知道它是有效的。我正在将应用程序移植到Silverlight web应用程序,遇到了一个问题。

我包含了代码的简化版本以及抛出的错误。在EndGetResponse方法上抛出错误。

请随意询问更多信息。我四处寻找解决方案,但没有找到任何有效或真正适用于我的问题的方法。这看起来是如此简单的代码,它在WP7版本上运行完美。如有任何帮助,不胜感激。

<标题>
void SendRequest() {
    string url = "http://some-example-restful-service:5600/locations/data/all";
    HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create(url);
    request.Method = "POST";
    request.ContentType = "application/json; charset=utf-8";
    request.BeginGetResponse(new AsyncCallback(RequestCallback), request);
}
public static void RequestCallback(IAsyncResult asyncResult) {
    HttpWebRequest request = (HttpWebRequest) asyncResult.AsyncState;
    HttpWebResponse response = (HttpWebResponse) request.EndGetResponse(asyncResult);
    //Parse JSON object
    response.Close();
    //Dispatch result back to GUI thread
}
<标题> 的错误

SecurityException未被用户代码处理

System.Security。SecurityException: Security error.

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()

Silverlight HttpWebRequest安全异常

原来我需要在服务域的根目录上添加一个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(浏览器内)遵循从其请求数据的服务器的跨域策略。因为它是你自己的web服务,你可以添加一个crossdomain.xml文件到你的应用程序的根允许外部域跨域请求(根据这个答案)。