Как написать код, который вызывает службу WCF и при необходимости переключается с Kerberos на NTLM?

Мне нужно вызвать службу WCF программно. Служба может быть размещена с аутентификацией NTLM или Kerberos и должна работать в любом из них. То есть, если подключение к службе через Kerberos не удается, она должна вернуться к NTLM.

Вот код, который я использую для проверки подлинности Kerberos (при необходимости, служба размещена в SharePoint 2010 и вызывается из веб-часть):

public static SiteMembershipSvc.SiteMembershipServiceClient InitialiseSiteMembershipService(string url)
{
    var binding = new BasicHttpBinding();
    binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
    binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
    url = url.EndsWith("/") ? url + SiteMembershipAddress : url + "/" + SiteMembershipAddress;
    var endpoint = new EndpointAddress(url);
    var proxy = new SiteMembershipSvc.SiteMembershipServiceClient(binding, endpoint);
    proxy.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
    return proxy;
}

Вызов метода на прокси-сервере при запуске в среде NTLM дает ошибку: схема аутентификации клиента «Переговоры». Заголовок аутентификации полученный с сервера был "NTLM".

Примечание: URL-адрес может находиться в другом веб-приложении на другом сервере. Я не могу проверить, с какой аутентификацией работает веб-приложение веб-части, и предполагаю, что она такая же, как и в месте, где размещена служба WCF.

Как я могу (автоматически или вручную) обеспечить возврат аутентификации с Kerberos обратно к NTLM в случае сбоя ?

Обновление:

Как уже упоминалось, ошибка аутентификации возникает при вызове веб-метода. Однако я не хочу ждать так долго, поскольку в сервисе есть несколько веб-методов, вызываемых из разных мест. Я хотел бы протестировать аутентификацию в точке, где настроен прокси (в приведенном выше фрагменте кода).

Я пробовал использовать proxy.Open () , но это не похоже на вызвать отказ.

8
задан Alex Angas 24 September 2010 в 00:03
поделиться