从Silverlight调用REST服务

本文关键字:服务 REST 调用 Silverlight | 更新日期: 2023-09-27 18:00:45

我正在为我们的intranet构建一个Silverlight 4.0 web应用程序,该应用程序将通过REST连接到服务器以获取数据。我正在使用Visual Studio 2010。

我在一个方法中使用以下代码来提出请求:

var wc = new WebClient();
const string uri = "http://server/api/statistics.svc/overall/";
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
wc.OpenReadAsync(new Uri(uri, UriKind.Absolute));

我的OnReadCompleted事件处理程序:

void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    var buffer = new byte[e.Result.Length];
    e.Result.Read(buffer,0,(int)e.Result.Length);
    var xmlstr = buffer.Aggregate(String.Empty, (current, t) => current + (char) t);
    // Do something with xmlstr...
}

我的问题出现在尝试运行应用程序时。异常在wc_OpenReadCompleted事件处理程序的第一行引发,并具有以下详细信息:

 TargetInvocationException: An exception occurred during the operation, making the result invalid.  Check InnerException for exception details.

内部异常:

 System.Security.SecurityException: Security error.

我的REST服务不使用任何类型的身份验证。

我创建了一个位于的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="/api/statistics.svc/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

非常感谢您的帮助!

谢谢,

Jeffrey Kevin Pry

更新

我没有在xml文件中指定/api/。问题已解决。

谢谢!

从Silverlight调用REST服务

您的Silverlight应用程序只允许连接到下载它的服务器以及具有跨域策略文件的服务器。这被称为同源政策。出于安全原因,拒绝连接到任何其他服务器。