我有一个在开发中使用 basicHttpBinding 的 WCF 服务。
现在在产品中我们想要使用 SSL,我必须进行哪些更改才能强制仅使用 SSL 连接?
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
、Transport
、Message
、TransportWithMessageCredential
和 TransportCredentialOnly
。
您可以在以下位置找到更多详细信息:http://msdn.microsoft.com/en-us/library/system.servicemodel.basichttpsecuritymode.aspx
我刚刚遇到了同样的问题,并找到了这篇 MSDN 文章: 如何:使用 SSL 配置 IIS 托管的 WCF 服务 在文章最后你会找到WebConfig文件的xml配置。
该解决方案对我来说效果很好。还要说一件事,请记住,您需要一个真正的证书才能发布!
我认为,如果在您的绑定下有
<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;
}