使用Silverlight使用JSON会抛出SecurityException

时间:2015-03-11 02:33:22

标签: json silverlight

我试图在按钮点击时从Silverlight应用程序中使用JSON服务。但是在阅读JSON服务URL时,它会抛出以下异常。

System.Security.SecurityException ---> System.Security.SecurityException: Security error.
   at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
   at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClassa.<EndGetResponse>b__9(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 System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result)
   at System.Net.WebClient.OpenReadAsyncCallback(IAsyncResult result)

以下是我的代码:

private void Button_Click(object sender, RoutedEventArgs e)
        {
            WebClient client = new WebClient();
            client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
            string url = "http://www.javascriptkit.com/dhtmltutors/javascriptkit.json";
            client.OpenReadAsync(new Uri(url));
        }

        private void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
              StreamReader reader = new StreamReader(e.Result);
        }

请帮我修理

我在web文件夹中添加了clientaccesspolicy.xml。但当Fiddler被检查时,它说,&#34;在此服务器上找不到请求的URL /clientaccesspolicy.xml&#34; 。但我可以从我的网址访问这个xml。

    <?xml version="1.0" encoding="utf-8" ?> 
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="*"/>
<domain uri="http://*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>

1 个答案:

答案 0 :(得分:0)

在允许连接到网络资源之前,Silverlight运行时将尝试从承载网络资源的域下载安全策略文件。有两种不同的方法用于下载安全策略,这取决于连接请求是来自WebClient还是HTTP类,或者连接请求是否来自套接字。

如果连接请求是从WebClient或HTTP类到跨域站点,则Si​​lverlight运行时会尝试使用HTTP协议下载安全策略文件。 Silverlight运行时首先尝试下载名为&#34; clientaccesspolicy.xml&#34;的Silverlight策略文件。在使用HTTP协议的请求目标域的根目录。

如果&#34; clientaccesspolicy.xml&#34;如果未找到(Web请求返回404状态代码),使用意外的mime类型返回,无效的XML或具有无效的根节点,则Si​​lverlight运行时将发出对Flash策略文件的请求,名称&#34; crossdomain.xml&#34;在所请求的目标域的根目录下,使用HTTP协议。

不允许对策略文件进行HTTP重定向。策略文件的重定向将导致SecurityException拒绝访问。