我有一个Silverlight应用程序,在开发过程中一直使用http与自托管WCF服务进行通信。我现在通过https保护服务。我在项目开始时遇到了错误:
尝试向URI“https://localhost:8303/service”发出请求时出错。这可能是由于尝试在没有适当的跨域策略的情况下以跨域方式访问服务,或者是不适合SOAP服务的策略。您可能需要联系服务的所有者以发布跨域策略文件,并确保它允许发送与SOAP相关的HTTP标头。在不使用InternalsVisibleToAttribute属性的情况下,在Web服务代理中使用内部类型也可能导致此错误。有关更多详细信息,请参阅内部异常。
我的clientaccesspolicy.xml文件设置为允许从http:// *和https:// *进行访问。唯一的区别是使用http vs https。在我切换到https之前,我可以看到(通过Fiddler)请求的clientaccesspolicy.xml文件,但现在我不能。我现在看到的只是两次调用 CONNECT localhost:8303 HTTP / 1.0 ...它似乎是命中服务器根目录,但没有请求clientaccess文件。有什么想法吗?
答案 0 :(得分:2)
您使用的是自签名证书吗?如果是这样,您是否在浏览器中添加了服务器域(看起来您的服务在localhost上给出错误消息)作为证书例外?
这可能不是您的问题,但在使用自签名证书通过SSL访问WCF服务时,如果未在浏览器设置中明确添加域作为例外,则会遇到安全性异常。如果您通过HTTP访问您的应用程序,但通过HTTPS访问您的服务,浏览器永远不会提示您添加例外。
以下是一些博客文章,如果这不是您的问题,可能有助于让SSL在Silverlight中运行:
http://kevindockx.blogspot.com/2009/12/getting-silverlight-to-work-over-ssl.html
答案 1 :(得分:1)
除了Dan Auclair的链接外,另一个项目是Fiddler。 Fiddler被设置为解密HTTPS流量并且搞砸了通信。我禁用了解密的HTTPS流量,并且(除了Dan的建议)它有效。