2013-05-22 3 views
0

У меня есть простое приложение .NET WPF. Я добавил ссылку на службу. вПроверка подлинности NTLM на Sharepoint Services завершилась неудачно в List.asmx, но работает для copy.asm

//server:port/sites/site_collection_name/_vti_bin/lists.asmx

и называем его рассылки. Я набрал код с последующим

 ListsSoapClient client = new ListsSoapClient(); 
     if (client.ClientCredentials != null) 
     client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;   

     try 
     { 
       client.Open(); 
       Console.WriteLine(client.State); 
       System.Xml.Linq.XElement listCollection = client.GetListCollection(); 
     } 
} 

От app.config

  <binding name="ListsSoap"> 
      <security mode="TransportCredentialOnly"> 
       <transport clientCredentialType="Ntlm" proxyCredentialType="Ntlm" 
        realm="" /> 
       <message clientCredentialType="UserName" algorithmSuite="Default" /> 
      </security> 
      </binding> 

Выше код Фиксаторы CommunicationException:

System.ServiceModel.Security.MessageSecurityException: 
The HTTP request is unauthorized with client authentication scheme 'Ntlm'. 
The authentication header received from the server was 'NTLM'. ---> 
System.Net.WebException: The remote server returned an error: (401) Unauthorized. 
    at System.Net.HttpWebRequest.GetResponse() 
    at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) 
    --- End of inner exception stack trace --- 

Server stack trace: 
    at System.ServiceModel.Channels.HttpChannelUtilities.ValidateAuthentication 
    HttpWebRequest request, HttpWebResponse response, WebException responseException, HttpChannelFactory`1 factory) 

Я включил окна autentication на МКС, где находится SharePoint. Очень странно, что я использовал аналогичный код для успешного добавления документа в библиотеку документов. Все правильные учетные данные описывают добавленный документ в списке sharepoint.

Я даже пробовал устареть: client.ClientCredentials.Windows.AllowNtlm = true;

ответ

0

Я заменил Service Reference с веб-ссылкой, и он работает.

0

Если вы пытаетесь вызвать этот веб-сервис с другой фермы, вы столкнетесь с проблемой двойного перескока, объясненной here. В принципе, NTLM не знает, что такое учетные данные Windows для пользователей SharePoint. Вы можете обойти эту проблему:

  • жестко прописывать полномочия,
  • позволяет анонимный доступ, или
  • настройка аутентификации Kerberos.
+0

Я решил проблему с использованием Web Reference вместо использования Service Reference. Почему NTLM в справочной службе «Copy.asmx» работает, а ссылка на «List.asmx» не является вопросом. – AdrianX

 Смежные вопросы

  • Нет связанных вопросов^_^