是否可以从Silverlight访问Rally的SOAP服务?我能够从桌面应用程序中的.NET 2.0代理访问该服务,但不能通过Silverlight中的WCF客户端代理访问该服务。我得到以下熟悉的例外,
System.ServiceModel.CommunicationException: 发生错误 试图向URI发出请求....这可能是由于尝试 在没有适当的情况下以跨域方式访问服务 适当的跨域策略,或不适合SOAP的策略 服务。您可能需要联系服务所有者进行发布 跨域策略文件,并确保它允许与SOAP相关的HTTP 要发送的标头。使用内部也可能导致此错误 Web服务代理中的类型,而不使用 InternalsVisibleToAttribute属性。请查看内部异常 了解更多详情。
我认为问题是由尝试从Silverlight发出跨域请求引起的,这需要在服务器上安装跨域策略文件。如果是这种情况,为什么桌面应用程序不需要这样的策略?
答案 0 :(得分:0)
我不是Silverlight专家,但这看起来像是一个跨域脚本/安全沙箱,Silverlight强制要求确保Silverlight客户端不向除下载它们的服务器/主机之外的站点发出请求,除非Silverlight客户端是由服务提供商/ devloper专门授予的权利。在上面的错误消息中:
“您可能需要联系服务所有者以发布跨域策略文件,并确保它允许发送与SOAP相关的HTTP标头。”
我认为“服务所有者”是指Silverlight主机的所有者,而不是“外部”Web服务(在本例中为Rally)。
桌面和/或控制台应用程序不会具有相同的沙箱限制。您可能会遇到同样的问题,试图通过Silverlight客户端访问其他供应商的Web服务。
您可能会发现这个特定于Silverlight的线程:
有助于了解如何在服务器上设置和配置Silverlight跨域策略文件。
答案 1 :(得分:0)
Silverlight的构建充分考虑了安全性。这意味着默认情况下会禁用Silverlight应用程序中的跨站点脚本,并且必须根据具体情况启用。另一方面,.NET桌面应用程序通常具有更高的安全权限,可以调用任何Web服务,COM对象和本机API。
您在Silverlight中解决此问题的方法是在服务器上创建服务。 Silverlight客户端代码调用服务器端服务,后者又调用第三方Web服务。服务器端服务可以打赌.NET,java等等。 Web服务器通常可以调用任何他们喜欢的东西 - 问题解决了。
答案 2 :(得分:0)
使用Silverlight 5中提供的扩展权限功能自行解决了这个问题。由于xap部署在内部互联网上,因此该解决方案是可以接受的。