2011-10-21 31 views
7

我在Silverlight 4clientaccesspolicy.xml不要求第一次在某些浏览器

后开始运行到一个奇怪的问题与跨域Web服务调用立即,应用程序调用从那里同一主机上的web服务它已被下载,但在不同的端口上(例如,应用程序驻留在http://www.mydomain.com:80,web服务在http://www.mydomain.com:81)。没有涉及SSL。 主机提供了一个正确的clientaccesspolicy.xml文件,一切正常大部分时间(如99.9%)。

但是,在某些情况下,浏览器不会请求clientaccesspolicy.xml,因此Web服务调用会被阻止并导致跨域错误。

在这种典型的情况是要求你使用Fiddler或Chrome开发者工具看到的序列:

  • 的index.html(页面主办Silverlight应用程序)
  • 的Silverlight.js
  • 应用.XAP
  • clientaccesspolicy.xml(要求和正确下载)
  • Web服务调用

在某些情况下,但是你只看到

  • 的index.html(托管Silverlight应用程序的页面)
  • 的Silverlight.js
  • application.xap
  • - >跨域错误(没有clientaccesspolicy请求,没有网络服务电话)。

这只是发生在机器的少数(所有运行Windows 7)如果所有这些条件都为真:在运行中的Chrome,火狐

  • 应用程序或外的浏览器(IE总是工作)
  • 第一次加载页面(也就是说,如果你点击浏览器上的Reload按钮问题消失。关闭/重新启动浏览器并在第一时间,你仍然有问题)
  • 否Fiddler正在运行(如果您通过Fiddler运行流量,问题就会消失)。 Chrome开发者工具虽然没有效果。
  • 该机器与服务器在相同的域内。如果您从外部网络(使用同一台机器)访问该页面,则问题不在此处。

在那些机器上,在这些情况下,问题是100%可重现的。

这可能是什么原因造成的?我可以执行哪些步骤来跟踪此问题?

回答

11

这个问题显然非常罕见,但在微软的帮助下,我找到了解决方案。我将其发布以供将来参考,以便希望this不会再发生。

作为安全措施,Silverlight将阻止Internet区域和本地Intranet区域之间的任何跨域呼叫。在这种情况下,它甚至不请求clientaccesspolicy.xml。因此,如果应用程序托管在www.myhost.com(Internet区域)上,Silverlight将阻止他在www.another.com(本地Intranet区域)上调用Web服务。

This blog post详细解释它。

所以,如果你有一个或多个以下症状(尽管已经丢弃了明显的跨域错误,如畸形或错位clientaccesspolicy.xml):从一些明显的随机机(几个不同的位置

  • 跨域错误/域),但是从其他机器工作
  • clientaccesspolicy.xml在所有
  • 作品在一些浏览器没有要求,不与他人。显然是随机的,有时不适用于任何浏览器。
  • 有时运行
  • 一切,当小提琴手是开放的没有问题,但错误没有提琴手正常工作在本地主机上

这可能是值得尝试以下,以将应用程序主机和网络服务在同一个安全区域:

  • 点击IE的安全设置(这些设置也用于访问网络的任何应用程序,即任何其他浏览器一样)
  • 添加了增加RESS承载承载Web服务的本地Intranet网站 或
  • 取消选中“自动检测Intranet网络”标志
(让他们 无论是在Internet区域结束)的应用程序和地址
+1

我可以吻你的先生。 –

+1

我也想吻你。这解决了一个问题,导致我们无法使用IIS平滑流式处理技术继续前进。 – theChrisKent

相关问题