gpt4 book ai didi

wcf - Silverlight WCF + SSL 安全错误 - 从未请求过 crossdomain.xml

转载 作者:行者123 更新时间:2023-12-04 10:21:34 27 4
gpt4 key购买 nike

(我看到几个与我的问题相关的问题,但没有一个解决方案对我有用,因为我在生产中遇到了这个问题,而不是在本地开发过程中,而且我已经尝试了所有建议的修复。)

我有一个使用 IIS 托管的 WCF 服务的 Silverlight 4 应用程序。在生产环境中,这些服务是通过 HTTPS 访问的。尽管有 a valid crossdomain.xml访问服务时,我仍然会收到著名的“安全错误”:

An error occurred while trying to make a request to URI 'https://MYDOMAIN/MYSERVICE.svc'. This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, or a policy that is unsuitable for SOAP services. You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent. This error may also be caused by using internal types in the web service proxy without using the InternalsVisibleToAttribute attribute. Please see the inner exception for more details. ---> System.Security.SecurityException ---> System.Security.SecurityException: Security error...



使用 Fiddler 我可以看到没有对 crossdomain.xml 或 clientaccesspolicy.xml 发出请求。对服务器有一个 CONNECT 请求,但仅此而已。

我读过这个错误,虽然它表明 crossdomain.xml/clientaccesspolicy.xml 有问题,但也可以在服务器颁发无效证书时引发。在我的场景中似乎并非如此。

我确定以下设置正确:
1. crossdomain.xml 有效,托管在站点根目录下
2. 服务确实有效(我们有使用它们的各种技术的其他客户端,包括依赖 crossdomain.xml 的 Adob​​e Flex。)
3. Silverlight 应用程序确实可以工作(它可以与本地服务和共享开发服务器上的服务一起正常工作***)
4. Silverlight 应用程序甚至不会尝试请求 crossdomain.xml 或 clientaccesspolicy.xml(由 Fiddler 确认)
5. Silverlight 应用程序使用正确的配置通过 https 访问 WCF。下面是配置:
<configuration>  
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IMyServices" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<security mode="Transport" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://MYDOMAIN/MYSERVICE.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMyServices" contract="Services.IMyServices" name="BasicHttpBinding_IMyServices" />
</client>
</system.serviceModel>
</configuration>

还有什么可能导致这种问题?可能是因为 Web 服务器是负载平衡的吗?还是我没有注意到的证书有问题?如果您至少可以为我指出正确的方向,那将不胜感激。

(***值得指出的一点:我在我们的开发环境中遇到了类似的问题。Silverlight 应用程序无法访问共享开发服务器上的 WCF 服务,尽管有正确的 crossdomain.xml 并且不使用 HTTPS。我解决了它通过将开发服务器添加为 IE 中的受信任站点。但是,这种相同的解决方法不适用于生产,即使那样它也不是可接受的解决方法。但是我必须在开发环境中执行此操作的事实让我担心我一路上错过了什么......)

最佳答案

问题是我缺少clientaccesspolicy.xml。在这种情况下,拥有 crossdomain.xml 是不够的。我认为这是因为 WCF 调用不仅是跨浏览器而且是跨协议(protocol)的(Silverlight 应用程序是通过 http 提供的,但服务是通过 https 提供的)。

此外,我的 clientaccesspolicy.xml 必须明确允许 http 访问,如下所示:

<?xml version="1.0" encoding="utf-8"?>  
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="SOAPAction">
<!-- IMPORTANT! Include these lines -->
<domain uri="http://*"/>
<domain uri="https://*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>

它现在就像一个魅力。

一路上让我绊倒的几件事:
  • 我的浏览器正在缓存 clientaccesspolicy.xml 和 crossdomain.xml。每次更改其中一个文件时,我都必须清除缓存,否则它将无法识别较新的版本,尽管 IIS 已配置为阻止客户端缓存此文件。
  • 对 clientaccesspolicy.xml 和 crossdomain.xml 的请求并不总是出现在 Fiddler 中。相反,我经常会看到 CONNECT 请求。我不明白为什么会这样,但我已经学会了不依赖 Fiddler 来确认这些请求正在发出。也许我在某处有一些恶意设置(它不是“解密 HTTPS 流量”设置,因为我已经禁用了它)。
  • 关于wcf - Silverlight WCF + SSL 安全错误 - 从未请求过 crossdomain.xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4855830/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com