我有一个在开发中使用basicHttpbinding的WCF服务。
现在在产品中我们想要使用SSL,我必须做哪些更改才能强制使用SSL连接?
答案 0 :(得分:44)
MSDN上的这个页面解释了WCF绑定安全性。
http://msdn.microsoft.com/en-us/library/ms729700.aspx
BasicHttpBinding类是 主要用于与之互操作 现有的Web服务,以及许多 这些服务由互联网托管 信息服务(IIS)。 因此,运输安全 这个绑定是专为 与IIS无缝互操作 站点。这是通过设置 安全模式到运输然后 设置客户端凭据类型。 凭证类型值对应 到IIS目录安全机制。 以下代码显示了该模式 正在设置并设置凭据类型 到Windows。你可以用它 客户端和 服务器位于同一个Windows域中。
C#
BasicHttpBinding b = new BasicHttpBinding(); b.Security.Mode = BasicHttpSecurityMode.Transport ; b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
或者,在配置中:
<bindings> <basicHttpBinding> <binding name="SecurityByTransport"> <security mode="Transport"> <transport clientCredentialType="Windows" /> </security> </binding> </basicHttpBinding> </bindings>
要在没有登录的情况下启用ssl,请将clientCredentialType设置为“None”。
安全模式的选项是:
无,传输,消息,TransportWithMessageCredential和TransportCredentialOnly
您可以在以下网址找到更多详情:http://msdn.microsoft.com/en-us/library/system.servicemodel.basichttpsecuritymode.aspx
答案 1 :(得分:1)
我刚遇到同样的问题,发现这篇MSDN文章: How to: Configure an IIS-hosted WCF service with SSL 在本文的最后,您将找到WebConfig文件的xml配置。
解决方案对我来说效果很好。还有一件事要说,请记住,你需要一个真正的证书才能发布!
答案 2 :(得分:0)
我认为,如果你的“绑定”中有<Security mode="Transport">
,如果你将它改为<security mode="None">
,你就可以了。
这是我正在处理的代码库的副本,我在代码中执行了该代码库,它似乎正在运行。我至少在我点击服务时获得了WSDL,如果这有用的话:)
BasicHttpBinding basicBinding = new BasicHttpBinding();
if (RegistryConnectionStringFactory.UseSslForCommunications)
{
basicBinding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;
basicBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
}
else
{
basicBinding.Security.Mode = BasicHttpSecurityMode.None;
basicBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
}