Поиск Sharepoint 2010 через webservice выдает «Попытка выполнить неавторизованную операцию»

#web-services #sharepoint #search

#веб-службы #sharepoint #Поиск

Вопрос:

Мы настроили Sharepoint search (правда, не enterprise) для индексации некоторых наших стандартных asp.net сайты и если я перехожу на страницу поиска в sharepoint и выполняю поиск чего-либо конкретного, я получаю результаты, которые я ищу.

Однако сейчас я пытаюсь использовать веб-сервис поиска со стандартного веб-сайта (не в sharepoint) и получаю ошибку «Попытка выполнить неавторизованную операцию». Я знаю, что я аутентифицируюсь должным образом, поскольку fiddler показывает мне ответ 401, а затем 200, чтобы сказать, что все в порядке. Однако в тот момент, когда я звоню.Запрос (последняя строка в моем примере кода) выдает ошибку.

Это мой код

 searchcentre2.QueryService queryService = new searchcentre2.QueryService();
System.Net.NetworkCredential _credentials = new System.Net.NetworkCredential(_username, _password, _domain);
queryService.Credentials = _credentials;
queryService.UseDefaultCredentials = false;
queryService.PreAuthenticate = true;
queryService.Url = _url;
m_lSearchResutls.Text = queryService.Query(queryxml.ToString());
  

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

  1. Отключение анонимности везде, как на моем локальном сайте, так и в разделе поиска sharepoint.
  2. Устанавливаю учетные данные своими собственными, и я нахожусь в группе владельцев сайтов и администраторов семейства сайтов
  3. Предоставил доступ к имени моего компьютера группе администраторов семейства веб-сайтов (согласно совету моего системного администратора, поскольку пул приложений обоих сайтов работает под учетной записью сетевой службы)

Есть ли что-нибудь еще, что мне нужно установить, исправить или просмотреть? У меня заканчиваются идеи, что можно попробовать. Это что-то на стороне sharepoint, что мне еще нужно настроить?

Я пробовал как search.asmx / spsearch.asmx, так и .Запрос /.QueryEx и в приведенном выше сообщении об ошибке не было никакой разницы.

Существуют примеры кода, в которых вы используете базовую аутентификацию, добавляя ее в заголовок, который я пробовал, но это тоже не сработало. Я даже пробовал NTLM, однако, если бы это была моя безопасность, я бы наверняка не получил ответ 401, а затем 200?

Итак, теперь я начинаю думать, что это что-то на стороне Sharepoint, что я должен изменить. Но что?

Будем признательны за любую помощь.

Ответ №1:

Похоже, я исправил свою проблему. Спасибо Майклу О’Доновану из Microsoft за его советы.

В настоящее время я использую RSS-канал для поиска, который возвращает мне мое поле описания. Похоже, что он также принимает мои учетные данные (хотя мне нужно протестировать результаты поиска, чтобы убедиться, что я получаю правильные записи обратно). URL для RSS-канала поиска и его параметров querystring выглядит следующим образом: http://searchsite/_layouts/srchrss.aspx?k=keywordamp;s=scopeamp;u=amp;start=1

Мы не запускаем Kerberos в нашей среде sharepoint, и это является причиной наших проблем с аутентификацией на страницах search.asmx и spsearch.asmx. Где-то происходит двойной переход при аутентификации, и kerberos решил бы эту проблему.

Надеюсь, это поможет кому-то еще в том же затруднительном положении, что и я.

Комментарии:

1. … и где Майкл О’Донован из совета и предложений Microsoft? Я думаю, что это действительно раздражает, не направлять людей к решению, а вместо этого сообщать, что это исправлено. Как это поможет другим, которые, возможно, захотят получить помощь с подобной проблемой?

2. Привет, codingjoe, я должен был быть более четким в своем комментарии. Майкл указал на тот факт, что мы не используем Kerberos, а поиск sharepoint требовал нескольких переходов для аутентификации (так, как мы хотели его использовать). В то время нашим единственным решением была настройка Kerberos.

3. В качестве альтернативы он предложил использовать RSS-канал поиска, но он был ограничен в том, что вы могли отображать и как вы могли манипулировать результатами.