Silverlight clientaccesspolicy.xml在某些浏览器中不是第一次被请求的

Silverlight clientaccesspolicy.xml在某些浏览器中不是第一次被请求的,silverlight,silverlight-4.0,Silverlight,Silverlight 4.0,我在Silverlight 4中遇到了一个奇怪的跨域Web服务调用问题 启动后,应用程序立即在下载Web服务的主机上调用Web服务,但调用的端口不同(例如,应用程序位于,Web服务位于)。不涉及SSL。 主机提供了一个正确的clientaccesspolicy.xml文件,并且在大多数情况下一切都正常工作(比如99.9%) 但是,在某些情况下,浏览器不会请求clientaccesspolicy.xml,因此webservice调用被阻止,并因跨域错误而失败 在典型情况下,这是您使用Fiddler

我在Silverlight 4中遇到了一个奇怪的跨域Web服务调用问题

启动后,应用程序立即在下载Web服务的主机上调用Web服务,但调用的端口不同(例如,应用程序位于,Web服务位于)。不涉及SSL。 主机提供了一个正确的clientaccesspolicy.xml文件,并且在大多数情况下一切都正常工作(比如99.9%)

但是,在某些情况下,浏览器不会请求clientaccesspolicy.xml,因此webservice调用被阻止,并因跨域错误而失败

在典型情况下,这是您使用Fiddler或Chrome developer工具看到的请求序列:

  • index.html(承载silverlight应用程序的页面)
  • silverlight.js
  • application.xap
  • clientaccesspolicy.xml(正确请求和下载)
  • 网络服务呼叫
但在某些情况下,你只能看到

  • index.html(承载silverlight应用程序的页面)
  • silverlight.js
  • application.xap
  • ->跨域错误(未请求clientaccesspolicy,未调用web服务)
如果所有这些条件均为真,则仅在少数机器(所有运行Windows 7的机器)上发生此情况:

  • 在Chrome、Firefox或浏览器外运行的应用程序(IE始终有效)
  • 这是您第一次加载页面时(即,如果您点击浏览器的“重新加载”按钮,问题就会消失。关闭/重新启动浏览器,第一次仍然存在问题时)
  • 没有Fiddler运行(如果通过Fiddler运行流量,问题就会消失)。不过,Chrome开发工具没有任何效果
  • 计算机与应用程序服务器位于同一域中。如果您从外部网络(使用同一台机器)访问该页面,则不存在问题
在这些机器上,在这些情况下,问题是100%可再现的


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

这个问题显然非常罕见,但在Microsoft的帮助下,我找到了解决方案。我把它贴出来供将来参考,希望以后不会再发生这种事

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

详细解释一下

因此,如果您有以下一个或多个症状(尽管已放弃了明显的跨域错误,如格式错误或放置错误的clientaccesspolicy.xml):

  • 一些明显随机的机器(几个不同的位置/域)产生的跨域错误,但在其他机器上工作
  • 根本没有请求clientaccesspolicy.xml
  • 适用于某些浏览器,不适用于其他浏览器。显然是随机的,有时不使用任何浏览器
  • 当Fiddler打开时,有时没有问题,但在Fiddler未运行时出现错误
  • 在本地主机上一切正常
为了将应用程序主机和web服务置于同一安全区域,可能值得尝试以下操作:

  • 转到IE安全设置(访问网络的任何应用程序也会使用这些设置,即任何其他浏览器)
  • 将承载应用程序的地址和承载Web服务的地址添加到本地Intranet站点 或
  • 取消选中“自动检测intranet网络”标志(这样它们都会在Internet区域中结束

我也想吻你。这就解决了一个问题,这个问题阻碍了我们继续推进IIS平滑流媒体。