2

我正在开发一个 Silverlight 5 项目,并且正在构建一个通过 SSL 连接到 WCF 服务的应用程序。当我通过 HTTP 连接时,这似乎在浏览器和浏览器外都有效。现在我已经实现了 SSL,它只适用于浏览器。有任何想法吗?

4

1 回答 1

0

如果没有任何其他详细信息,很难猜测出了什么问题,但我最好的猜测是您使用的证书不受 Windows 信任,而受浏览器信任。您是否使用了一些您导入浏览器的自签名证书?如果你是,你也应该导入到 Windows 证书存储中。

在浏览器中运行时,Silverlight 将通过浏览器执行所有 http(s) 调用,因此将由浏览器决定证书是否受信任。在浏览器之外,使用内置的 http 堆栈,而后者又使用 Windows 的 CA 列表。

您可以通过将这些行添加到 App.xaml.cs 中的 Application_Startup() 来强制 Silverlight 使用某个 http 堆栈:

 WebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.BrowserHttp);
 WebRequest.RegisterPrefix("https://", System.Net.Browser.WebRequestCreator.BrowserHttp);

这将使您的应用程序在运行 Out of Browser 时使用 IE 堆栈。即使在浏览器中运行,您也可以执行相反的操作并使用内置的 http 堆栈:

 WebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.ClientHttp);
 WebRequest.RegisterPrefix("https://", System.Net.Browser.WebRequestCreator.ClientHttp);
于 2012-10-17T16:13:21.403 回答