Вот мой сценарий: у меня есть сайт SharePoint, над которым я работаю, и он находится на одной ферме серверов. На этом сайте я создал HttpHandler, который использует поисковую веб-службу SharePoint, расположенную на другом сервере. Это выглядит примерно так:
- SharePoint Server A, where my site lives
- Has a service reference to SharePoint search web service on Server B
- Имеет обработчик http, который использует ссылку на службу для вызова службы поиска.
- SharePoint Server B, где живет поисковая служба
Мой код выглядит так:
BasicHttpBinding binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
QueryServiceSoapClient _queryService = new QueryServiceSoapClient(binding, new EndpointAddress("http://easearch.ea.com/_vti_bin/search.asmx"));
_queryService.ClientCredentials.Windows.AllowNtlm = true;
_queryService.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
_queryService.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
//_queryService.ClientCredentials.Windows.ClientCredential = new NetworkCredential("MyUsername", "MyPassword", "MyDomain"); //This is the only way it seems to work
//NetworkCredential userCredential = CredentialCache.DefaultCredentials.GetCredential(_queryService.Endpoint.ListenUri, "NTLM");
//_queryService.ClientCredentials.Windows.ClientCredential = userCredential;
string status = _queryService.Status();
Если я использую этот код из консольного приложения в моем устройстве для разработки, он работает должным образом. Но когда я пытаюсь использовать тот же код из своего обработчика http, он выдает ошибку
HTTP-запрос неавторизован со схемой аутентификации клиента «Ntlm». Заголовок аутентификации, полученный от сервера, был «NTLM».
Я пробовал несколько различных комбинаций приведенного выше кода, и единственное, что работает с моим HttpHandler, - это когда я напрямую предоставляю свои учетные данные. У кого-нибудь есть идеи?
Спасибо.