none
silverlight下载网页时总是抛出TargetInvocationException异常 RRS feed

  • 问题

  • 如题,很简单的代码,从一个网站上下载一些很简单的内容:

                var client = new WebClient();
                client.DownloadStringAsync(new Uri("http://sdcb.sinaapp.com/game/close_light/version.php"));
                client.DownloadStringCompleted += (o, e2) =>
                    {
                        MessageBox.Show(e2.Result);
                    };

    但总是提示:

    “e2.Result”引发了“System.Reflection.TargetInvocationException”类型的异常 

    请问是为什么?(注意,该代码可以在Windows Form和Consoles应用程序中通过)


    • 已编辑 Flysha 2011年10月31日 14:34
    2011年10月31日 14:33

答案

  • 问题已经解决,我查询了msdn,链接是:http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx,上面提到,是silverlight有对跨域操作有强制的安全认证,如果服务器没有相应的证书,操作是会deny掉的,所以需要在服务端的根目录下放一个证书文件"clientaccesspolicy.xml"或"crossdomain.xml ",进行相应的认证即可,下面我附上最简单的配置方法,msdn网站上有更详细的说明.

    "clientaccesspolicy.xml"文件:

     

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

    另外,我顺便还了解到,Flash访问网络也是需要类似的操作的

    • 已标记为答案 Flysha 2011年11月2日 1:34
    2011年11月2日 1:34

全部回复

  • 强烈希望有人回答

    2011年11月1日 16:36
  • 问题已经解决,我查询了msdn,链接是:http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx,上面提到,是silverlight有对跨域操作有强制的安全认证,如果服务器没有相应的证书,操作是会deny掉的,所以需要在服务端的根目录下放一个证书文件"clientaccesspolicy.xml"或"crossdomain.xml ",进行相应的认证即可,下面我附上最简单的配置方法,msdn网站上有更详细的说明.

    "clientaccesspolicy.xml"文件:

     

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

    另外,我顺便还了解到,Flash访问网络也是需要类似的操作的

    • 已标记为答案 Flysha 2011年11月2日 1:34
    2011年11月2日 1:34