我正在开发一个能够使用 wcf Web 服务获取数据的 Silverlight 5 应用程序。但是一旦尝试保存或删除,就会请求 clientaccesspolicy.xml 文件。此请求发生在 HTTP 协议中,然后浏览器报告Display mixed content
javascript 弹出对话框。完成的异步调用(例如BeginSaveChanges
静默失败)不会在回调中返回错误消息。为什么通过 HTTPS 运行并获取数据的应用程序很高兴,因为蛤蜊突然想要客户端访问策略文件并且一切都停止了?
在失败之前,Fiddler 显示了对实际 Web 服务的成功调用以获取数据。但是当进行保存/删除调用时,对根 clientaccesspolicy 的 http 调用被重定向到子域 clientaccesspolicy.xml。
Fiddler 会话捕获
# Result Protocol Host URL Body Caching Content-Type Process Comments Custom
285 200 HTTPS test.application.company.com /SUBSITE/WebService.svc/Terms()?$orderby=Description...{removed}... 742,658 no-cache application/atom+xml;type=feed;charset=utf-8 iexplore:16376
286 302 HTTP test.application.company.com /clientaccesspolicy.xml 189 text/html; charset=UTF-8 iexplore:16376
287 200 HTTP test.application.company.com /SUBSITE/clientaccesspolicy.xml 341 text/xml iexplore:16376
288 302 HTTP test.application.company.com /crossdomain.xml 182 text/html; charset=UTF-8 iexplore:16376
289 200 HTTP test.application.company.com /SUBSITE/crossdomain.xml 170 text/xml iexplore:16376
由于失败,我在 Fiddler 中没有看到实际的 webserivce 调用,但是当我在 HTTPS 下本地运行它时,我确实看到了它。
勘误表
- 我正在访问的测试服务器确实有一个负载均衡器。
- 当我在本地机器的 IIS 上调试它时,它可以工作,并且我确实看到正确的删除调用通过了
mixed content all in
每个 Fiddler 的 https` 没有问题。 - 如上所述,托管控件的网站位于
SUBSITE
上述指定的主要(默认站点)之下的级别。 - 上下文是通过传入一个 url
https://test.application.company.com/SUBSITE/WebService.svc
而不是使用默认 in 来创建的ServiceReferences.ClientConfig
。 - 上面使用的测试服务器上的证书是自签名证书,由于不受信任而存在问题。
主站点和托管站点都有 clientaccesspolicy.xml 和 crossdomain.xml。
<access-policy> <cross-domain-access> <!-- Silverlight 3 or higher requires the http-request-headers attribute. --> <policy> <allow-from http-request-headers="*" https-request-headers="*"> <domain uri="https://*" /> <domain uri="http://*" /> </allow-from> <grant-to> <resource path="/" include-subpaths="true"/> </grant-to> </policy> </cross-domain-access> </access-policy>