Минимальный клиент, который поддерживает безопасность на уровне сообщений через интерфейс канала - PullRequest
3 голосов
/ 01 сентября 2009

Я пытаюсь создать минимальный клиент для службы 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).

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

1 Ответ

0 голосов
/ 05 февраля 2012

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

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

...