【发布时间】:2010-09-30 08:54:56
【问题描述】:
我有一个在开发中使用 basicHttpbinding 的 WCF 服务。
现在我们要在产品中使用 SSL,我必须进行哪些更改才能仅强制 SSL 连接?
【问题讨论】:
-
这里回答:希望对stackoverflow.com/questions/2904883/…有帮助
我有一个在开发中使用 basicHttpbinding 的 WCF 服务。
现在我们要在产品中使用 SSL,我必须进行哪些更改才能仅强制 SSL 连接?
【问题讨论】:
MSDN 上的这个页面解释了 WCF 绑定安全性。
http://msdn.microsoft.com/en-us/library/ms729700.aspx
BasicHttpBinding 类是 主要用于互操作 现有的 Web 服务,以及许多 这些服务由 Internet 托管 信息服务 (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
【讨论】:
我刚遇到同样的问题,发现这篇 MSDN 文章: How to: Configure an IIS-hosted WCF service with SSL 文末有WebConfig文件的xml配置。
该解决方案对我来说效果很好。还有一件事要说,请记住,您需要一个 REAL 证书才能发布!
【讨论】:
我认为,如果在您的 bindings 下有 <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;
}
【讨论】: