SharePoint 2010 WCF RESTful проблема аутентификации с сайтом публикации анонимной аутентификации - PullRequest
1 голос
/ 17 ноября 2011

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

Сначала при попытке создать источник данных в Visual Studio 2010to 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.

1 Ответ

0 голосов
/ 22 февраля 2013

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

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); 
...