通过通道接口支持消息级安全性的最小客户端

时间:2009-09-01 13:42:16

标签: wcf wcf-client ws-security x509certificate2 wshttpbinding

我正在尝试使用带有SecurityMode: Message的WSHttpBinding通过直接通道接口为WCF服务构建最小客户端。

我目前的代码非常简单:

EndpointIdentity i = EndpointIdentity.CreateX509CertificateIdentity(clientCertificate);
EndpointAddress a = new EndpointAddress(new Uri("http://myServerUrl"), i);
WSHttpBinding b= new WSHttpBinding(SecurityMode.Message);
ChannelFactory<IRequestChannel> channelFactory = new ChannelFactory<IRequestChannel>(b, a);
channelFactory.Open();
IRequestChannel channel = channelFactory.CreateChannel();
channel.Open();
Message response = channel.Request(requestMessage);

正确加载clientCertificate。 然而,之后,我不确定我是否以正确的方式调用每个函数。

事实是:代码段的最后一行抛出一个内容为MessageSecurityException

  

出于SspiNegotiation / Kerberos的目的,客户端无法根据目标地址“http://myServerUrl”中的标识来确定服务主体名称。目标地址标识必须是UPN标识(如acmedomain \ alice)或SPN标识(如host / bobs-machine)。

这个问题可能是什么原因?

1 个答案:

答案 0 :(得分:0)

默认的ClientCredentialType似乎是Windows,这就是您收到与Sspi / Kerberos相关的错误的原因。您需要将“证书”指定为凭据类型,并在客户端凭据容器中设置实际证书。有关详细信息,请查看此链接的“客户”部分:

http://msdn.microsoft.com/en-us/library/ms733098.aspx