Программный доступ к списку Sharepoint во время выполнения (без создания ссылки на службу во время разработки)

#wcf #sharepoint #sharepoint-2010

#wcf #sharepoint #sharepoint-2010

Вопрос:

Я создаю приложение, которое будет настраиваться конечным пользователем для доступа к спискам SharePoint на различных сайтах SharePoint, которые вводятся пользователем.

Все примеры чтения списков SharePoint, с которыми я столкнулся в Интернете, имеют вид:

  1. Откройте или создайте проект Visual Studio.
  2. В обозревателе решений щелкните правой кнопкой мыши узел Ссылки, а затем выберите Добавить ссылку на службу.
  3. В поле Адрес введите URL целевого сайта и добавьте /_vti_bin/listData.svc. Например, адрес сайта в интрасети.wingtip.com было бы http://intranet.wingtip.com/_vti_bin/ListData.svc .
  4. Измените имя по умолчанию в поле пространства имен с ServiceReference1 на что-то более подходящее, например, WingtipSite.
  5. и т.д. и т.п. и т.п.

Этот метод создает прокси-классы в вашем проекте на основе указанной ссылки на сервер. Однако в моем случае сервер / сайт неизвестен во время разработки, известен только во время выполнения путем чтения сайтов / списков, указанных пользователем. Как бы это сделать (прочитать список через http://intranet.wingtip.com/_vti_bin/ListData.svc , но только во время выполнения)?

Примечание: Я выполняю этот вызов с компьютера, отличного от того, на котором запущен Sharepoint.

Ответ №1:

Есть пара ответов.

Если схемы списков будут согласованы на всех сайтах, к которым вы обращаетесь, вы все равно можете использовать созданный прокси. Когда вы создаете DataContext, вам просто нужно передать URI в listData.svc для сайта, выбранного пользователем.

Если нет, то вы можете использовать ASP.NET Веб-запрос с соответствующим URI в формате URI и обработайте полученный ответ ATOM или JSON.

Для получения дополнительной информации об использовании REST API ознакомьтесь с этим докладом на конференции SharePoint 2009

http://msdn.microsoft.com/en-us/sharepoint/ff462048

Ответ №2:

Вы можете задать URL-адрес в своем прокси-классе во время выполнения с помощью свойства Url.

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

1. У меня нет прокси-класса, дело не в том, что я не знаю, на каком сервере выполняется список, я даже не знаю ни о каких списках, когда он отправляется.

2. Почему бы не создать прокси-класс по локальному URL, который действителен только во время разработки, и установить реальный URL перед доступом к списку. Я сделал это таким образом для настраиваемого во время выполнения обработчика событий, который синхронизирует списки между фермами.

Ответ №3:

SharePoint не предоставляет прокси-класс для своих веб-служб. Поэтому невозможно установить URL во время выполнения. Что мне нужно было сделать, так это добавить 2 ссылки на службу, а затем настроить, к какой из них я буду обращаться. Я использую параметр конфигурации, чтобы определить, к какому из них обращаться. Если имя сайта изменится или изменится список, мне нужно удалить ссылки, повторно добавить их, перекомпилировать и повторно развернуть. Нет способа изменить сайт / список SharePoint во время выполнения. 3 дня искали ответ. Microsoft не знает, как этого добиться.

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

1. Да, возможно, придется применить к нему принципиально иной подход, не «рекомендованный Microsoft». Роб Виндзор предлагает приведенный ниже подход rest-api, который, вероятно, сработал бы.