3

Я пытаюсь создать минимальный клиент для службы WCF, используя WSHttpBinding с SecurityMode: Message по прямому канальному интерфейсу.Минимальный клиент, который поддерживает безопасность на уровне сообщений над интерфейсом канала

Мой текущий код очень прост:

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 с содержанием

Клиент не может определить имя участника службы на основе идентификационных данных в целевой адрес «http://myServerUrl» с целью SspiNegotiation/Kerberos. Идентификатор целевого адреса должен быть идентификатором UPN (например, acmedomain \ alice) или идентификатором SPN (например, host/bobs-machine).

В чем причина этой проблемы?

ответ

0

По умолчанию ClientCredentialType кажется Windows, и именно поэтому вы получаете сообщение об ошибке, связанную с Sspi/Kerberos. Вы должны указать «Сертификат» в качестве типа учетных данных, а также установить фактический сертификат в контейнере учетных данных клиента. Ознакомьтесь с разделом клиента этой ссылки для получения более подробной информации:

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