首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverlight HttpWebRequest SecurityException

Silverlight HttpWebRequest SecurityException
EN

Stack Overflow用户
提问于 2011-11-29 02:20:34
回答 2查看 7.6K关注 0票数 4

问题所在

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

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

请随时询问更多信息。我到处寻找解决方案,但没有找到任何有效或真正适用于我的问题的方法。它看起来像是如此简单的代码,并且在WP7版本上工作得很好。任何帮助都将不胜感激。

《守则》

代码语言:javascript
复制
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:安全错误。

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-30 04:14:01

原来我需要在服务的域的根目录下添加一个clientaccesspolicy.xml文件。

以下是该文件的内容:

代码语言:javascript
复制
<?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> 
票数 7
EN

Stack Overflow用户

发布于 2011-11-29 02:49:28

根据this answer的说法,Silverlight (在浏览器中)遵循你向其请求数据的服务器的cross-domain policy。因为它是您自己的web服务,所以您可以在您的应用程序的根目录中添加一个允许外部域发出跨域请求(每个this answer)的crossdomain.xml文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8300407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档