从Silverlight访问Rally SOAP服务

问题描述:

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

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

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

我不是Silverlight专家,但这看起来像是Silverlight强加的跨域脚本/安全沙箱,以确保Silverlight客户端不会向除他们所在的服务器/主机以外的站点发出请求下载,除非Silverlight客户端被服务提供商/ devloper特别授予了该权限。在上面的错误消息:

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

我想“的服务业主”是指Silverlight的主机的主人,而不是“外部” Web服务(在这种情况下,拉力赛)。

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

您可能会发现这个特定的Silverlight的螺纹:

Cross Domain Policy

利于如何设置的细节和你的服务器上配置一个Silverlight跨域策略文件。

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

您解决此问题在Silverlight的方法是在服务器上创建一个服务。 Silverlight客户端代码调用您的服务器端服务,然后调用第三方Web服务。服务器端服务可以下注.NET,Java等等。 Web服务器通常可以调用他们喜欢的任何东西 - 解决问题

+0

感谢您的回复。我考虑过这种方法,但是设法通过在Silverlight 5中使用提升的信任来解决它。 – 2012-04-27 00:17:48

+0

是的,这是解决它的另一种方式:在您的应用程序中激发一堆权限。 :)如果您不需要在浏览器中运行,则可能更容易从浏览器应用程序中获得较高的信任。区别在于浏览器中的提升信任的东西看起来像你必须签署你的应用程序的一切工作。哪一个更容易取决于你的情况和组织。 – 2012-04-27 18:06:48

通过使用在Silverlight 5.可用的扩展权限特征由于XAP部署内部互联网上,这一解决方案是可以接受的解决这个自己。