0

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

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

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

4

3 回答 3

0

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

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

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

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

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

跨域策略

对于如何在您的服务器上设置和配置 Silverlight 跨域策略文件的细节很有帮助。

于 2012-04-26T18:32:17.200 回答
0

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

于 2012-04-27T00:16:48.823 回答
0

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

在 Silverlight 中解决此问题的方法是在服务器上创建服务。Silverlight 客户端代码调用您的服务器端服务,该服务又调用第三方 Web 服务。服务器端服务可以押注 .NET、java 等等。Web 服务器通常可以调用它们喜欢的任何东西——问题已解决。

于 2012-04-26T19:38:22.637 回答