2009-09-01 68 views
3

我试图通过直接通道接口使用与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的目的,目标地址“http://myServerUrl”的身份服务主体名称/ Kerberos的。目标地址标识必须是UPN标识(如acmedomain \ alice)或SPN标识(如host/bobs-machine)。

这是什么原因造成的?

回答

0

默认的ClientCredentialType似乎是Windows,这就是为什么你会得到与Sspi/Kerberos相关的错误。您需要指定“证书”作为凭证类型,并在客户端凭证容器中设置实际证书。查看此链接的客户端部分了解更多详情:

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

相关问题