Проблема проверки подлинности SharePoint 2010 WCF RESTful с сайтом публикации анонимной проверки подлинности

У меня есть сайт публикации SharePoint 2010 с включенным параметром «Разрешить анонимный доступ», и у меня возникают проблемы с использованием доступа к данным WCF RESTful...

Во-первых, когда я пытаюсь создать источник данных в Visual Studio 2010 для listdata.svc, это не удается, если я не зайду в IIS и не отключу анонимную аутентификацию в _vti_bin. Если я отключу анонимную аутентификацию в _vti_bin, я смогу добавить источник данных без ошибок.

Во-вторых, если у меня отключена анонимная аутентификация в _vti_bin и я пытаюсь подключиться к SharePoint Designer, я получаю сообщение об ошибке после запроса имени пользователя/пароля.

В-третьих, если у меня разрешена анонимная аутентификация в _vti_bin и я пытаюсь запустить свой код WCF RESTful, оказывается, что переданные учетные данные не используются. См. код

 static void Main(string[] args)
    {  
        MySite.MySiteDataContext dc = new MySite.MySiteDataContext(new Uri("http://mysite/_vti_bin/ListData.svc/"));

        dc.Credentials = new NetworkCredential("user", "password", "domain");


        var q = from m in dc.Products
                select m;


        foreach (var i in q)
        { 

           //never gets in here when Anonymous Authentication is allowed on the _vti_bin       
           //when Anonymous Authentication is disabled on _vti_bin this code runs without issue. 

        }
    }

Итак ... Может ли кто-нибудь сказать мне, что я делаю неправильно, или есть ли обходной путь для этой проблемы?

Окружающая обстановка:

Сайт публикации SharePoint 2010 с включенным анонимным доступом Код работает в консольном приложении не на том же сервере, что и SharePoint Server.


person cbreier    schedule 16.11.2011    source источник


Ответы (1)


Вы должны создать привязку, как указано ниже.

BasicHttpBinding basicHttpBinding = new BasicHttpBinding();
basicHttpBinding.MaxReceivedMessageSize = Int64.MaxValue; 
basicHttpBinding.TransferMode = TransferMode.StreamedResponse; 
basicHttpBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; 
EndpointAddress endpoint = new EndpointAddress("yoururl"); 
basicHttpBinding.CloseTimeout = new TimeSpan(0, 10, 0, 0); 
basicHttpBinding.OpenTimeout = new TimeSpan(0, 10, 0, 0); 
basicHttpBinding.ReceiveTimeout = new TimeSpan(0, 10,## Heading ## 0, 0);
basicHttpBinding.SendTimeout = new TimeSpan(0, 10, 0, 0); 
DataService.ServiceClient obj = new DataService.ServiceClient(basicHttpBinding, endpoint); 
person Dharmendra Singh    schedule 22.02.2013