从Silverlight调用REST服务

时间:2011-06-28 10:33:36

标签: c# .net silverlight rest

我正在为我们的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 /。问题已经解决。

谢谢!

1 个答案:

答案 0 :(得分:2)

允许您的Silverlight应用程序仅连接到从中下载的服务器以及具有跨域策略文件的服务器。这被称为Same Origin Policy。出于安全原因,拒绝与任何其他服务器的连接。