在某些浏览器中首次未请求clientaccesspolicy.xml [英] clientaccesspolicy.xml not requested the first time in some browsers

查看:10
本文介绍了在某些浏览器中首次未请求clientaccesspolicy.xml的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

启动后,应用程序立即调用同一主机上的Web服务,该服务是从同一主机下载的,但位于不同的端口(例如。应用程序位于http://www.mydomain.com:80,而WebService位于http://www.mydomain.com:81)。不涉及任何SSL。 宿主提供了正确的clientaccesspolicy.xml文件,并且在大多数情况下一切正常(如99.9%)。

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

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

  • index.html(托管Silverlight应用程序的页面)
  • Silverlight.js
  • 应用程序.xap
  • clientaccesspolicy.xml(已正确请求和下载)
  • Web服务调用

但在某些情况下,您只能看到

  • index.html(托管Silverlight应用程序的页面)
  • Silverlight.js
  • 应用程序.xap
  • ->跨域错误(未请求客户端访问策略,未调用Web服务)。

如果满足所有这些条件,则仅在少数计算机(全部运行Windows 7)上发生这种情况:

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

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

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

推荐答案

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

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

This blog post详细说明。

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

  • 来自一些明显随机的计算机(几个不同的位置/域)的跨域错误,但从其他计算机工作
  • 根本没有请求clientaccesspolicy.xml
  • 适用于某些浏览器,但不适用于其他浏览器。显然是随机的,有时与任何浏览器都不起作用。
  • Fiddler打开时有时没有问题,但Fiddler不运行时会出错
  • 本地主机上一切正常

为了将应用程序主机和Web服务放在同一安全区域中,可能值得尝试以下操作:

  • 转到IE安全设置(访问网络的任何应用程序也使用这些设置,即任何其他浏览器也使用这些设置)
  • 将托管应用程序的地址和托管Web服务的地址添加到本地Intranet站点 或
  • 取消选中"自动检测内部网网络"标志(以便它们都位于Internet区域)

这篇关于在某些浏览器中首次未请求clientaccesspolicy.xml的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆