Исключение безопасности WCF при вызове из службы Windows - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть код, который использует службу WCF.Служба защищена базовой аутентификацией, поэтому при создании клиента я использую следующий код:

    BasicHttpBinding httpBinding = new BasicHttpBinding();
    httpBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
    httpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
    httpBinding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
    httpBinding.Security.Transport.Realm = service_realm;

    EndpointAddress address = new EndpointAddress(service_address);

    Service.ServiceClient client = new Service.ServiceClient(httpBinding, address);

    client.ClientCredentials.UserName.UserName = service_username;
    client.ClientCredentials.UserName.Password = service_password;

Работает нормально, когда я запускаю код из консольного приложения.Но когда я запускаю тот же код из службы Windows, создается исключение MessageSecurityException, сообщающее, что мой запрос был неавторизованным.По какой-то причине он использует текущую учетную запись Windows для проверки подлинности, поскольку моя собственная учетная запись имеет доступ к службе.Но я не хочу этого, я хочу использовать сохраненные учетные данные.Что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 03 ноября 2011

Кажется исправленным с помощью этой конфигурации:

_httpBinding = new BasicHttpBinding ();

_httpBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; _httpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; _httpBinding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;

_httpBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName; _httpBinding.Security.Message.AlgorithmSuite = SecurityAlgorithmSuite.Default;

_httpBinding.AllowCookies = false; _httpBinding.BypassProxyOnLocal = false; _httpBinding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard; _httpBinding.MessageEncoding = WSMessageEncoding.Text; _httpBinding.TextEncoding = Encoding.UTF8; _httpBinding.TransferMode = TransferMode.Buffered; _httpBinding.UseDefaultWebProxy = false; Service.ServiceClient client = новый Service.ServiceClient (_httpBinding, _address);

client.ClientCredentials.UserName.UserName = service_username; client.ClientCredentials.UserName.Password = service_password;

0 голосов
/ 03 ноября 2011

WCF basicHttpBinding не поддерживает открытый текст учетные данные;причина в том, что в момент, когда вы хотите передать учетные данные в привязке транспорта, WCF требует, чтобы базовый транспорт был защищенным транспортом, таким как SSL.

, чтобы ваш код работалЗатем вам потребуется использовать службу через https или использовать сертификаты или шифрование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...