从Silverlight访问Rally SOAP服务

时间:2012-04-26 17:29:38

标签: silverlight rally

是否可以从Silverlight访问Rally的SOAP服务?我能够从桌面应用程序中的.NET 2.0代理访问该服务,但不能通过Silverlight中的WCF客户端代理访问该服务。我得到以下熟悉的例外,

  

System.ServiceModel.CommunicationException:   发生错误   试图向URI发出请求....这可能是由于尝试   在没有适当的情况下以跨域方式访问服务   适当的跨域策略,或不适合SOAP的策略   服务。您可能需要联系服务所有者进行发布   跨域策略文件,并确保它允许与SOAP相关的HTTP   要发送的标头。使用内部也可能导致此错误   Web服务代理中的类型,而不使用   InternalsVisibleToAttribute属性。请查看内部异常   了解更多详情。

我认为问题是由尝试从Silverlight发出跨域请求引起的,这需要在服务器上安装跨域策略文件。如果是这种情况,为什么桌面应用程序不需要这样的策略?

3 个答案:

答案 0 :(得分:0)

我不是Silverlight专家,但这看起来像是一个跨域脚本/安全沙箱,Silverlight强制要求确保Silverlight客户端不向除下载它们的服务器/主机之外的站点发出请求,除非Silverlight客户端是由服务提供商/ devloper专门授予的权利。在上面的错误消息中:

“您可能需要联系服务所有者以发布跨域策略文件,并确保它允许发送与SOAP相关的HTTP标头。”

我认为“服务所有者”是指Silverlight主机的所有者,而不是“外部”Web服务(在本例中为Rally)。

桌面和/或控制台应用程序不会具有相同的沙箱限制。您可能会遇到同样的问题,试图通过Silverlight客户端访问其他供应商的Web服务。

您可能会发现这个特定于Silverlight的线程:

Cross Domain Policy

有助于了解如何在服务器上设置和配置Silverlight跨域策略文件。

答案 1 :(得分:0)

Silverlight的构建充分考虑了安全性。这意味着默认情况下会禁用Silverlight应用程序中的跨站点脚本,并且必须根据具体情况启用。另一方面,.NET桌面应用程序通常具有更高的安全权限,可以调用任何Web服务,COM对象和本机API。

您在Silverlight中解决此问题的方法是在服务器上创建服务。 Silverlight客户端代码调用服务器端服务,后者又调用第三方Web服务。服务器端服务可以打赌.NET,java等等。 Web服务器通常可以调用任何他们喜欢的东西 - 问题解决了。

答案 2 :(得分:0)

使用Silverlight 5中提供的扩展权限功能自行解决了这个问题。由于xap部署在内部互联网上,因此该解决方案是可以接受的。