在某些浏览器中首次未请求clientaccesspolicy.xml [英] clientaccesspolicy.xml not requested the first time in some browsers
本文介绍了在某些浏览器中首次未请求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屋!
查看全文