Вот мой сценарий: у меня есть сайт SharePoint, над которым я работаю, и он находится на одной ферме серверов. На этом сайте я создал HttpHandler, который использует веб-службу поиска SharePoint, расположенную на другом сервере. Так это выглядит примерно так:
- SharePoint Server A, где живет мой сайт
- Имеет ссылку на службу веб-службы поиска SharePoint на сервере 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, - это когда я напрямую предоставляю свои учетные данные. У кого-нибудь есть идеи?
Спасибо.