Поделиться через


Приемники событий и приемники событий списков в модели надстроек SharePoint

Обработка событий в новой модели надстроек SharePoint выполняется не так, как при использовании кода с полным доверием.

В типичном решении фермы с кодом, требующим полного доверия (FTC), приемники событий списков и других событий создавались с помощью

кода серверной объектной модели SharePoint Server и развертывались с помощью решений. В данном случае код приемника событий выполняется на сервере SharePoint Server.

В случае модели надстройки SharePoint приемники событий создаются за пределами SharePoint в веб-службе и регистрируются в SharePoint. Они называются удаленными приемниками событий (RER). В этом случае код приемника событий выполняется на том веб-сервере, где размещена веб-служба.

Важно!

С января 2017 г. SharePoint Online поддерживает веб-перехватчики списка, которые можно использовать вместо удаленных приемников событий "-ed". Дополнительную информацию о веб-перехватчиках см. в статье Обзор веб-перехватчиков SharePoint. Обратите также внимание, что некоторые примеры веб-перехватчиков доступны в репозитории GitHub sp-dev-samples.

Рекомендации высокого уровня

В качестве общего правила ниже приведены рекомендации высокого уровня для создания приемников событий.

  • Конечная точка службы, которая реализует приемник событий, должна быть доступна анонимным пользователям.
  • Приемники событий, добавленные на сайт надстройки, позволяют возвращать маркер доступа.
  • Приемники событий, добавленные на хост-сайт, возвращают маркеры доступа, если они применены из контекста приложения с помощью маркера доступа к приложению и операция на хост-сайте выполняется пользователем (ItemAdded и т. д.)
  • Событие AppInstalled должно быть завершено в течение 30 секунд, или SharePoint посчитает, что произошел сбой. SharePoint перезапустит событие три раза и после четвертого выполнения посчитает, что при установке надстройки произошел сбой.
  • У обычных событий, например у ItemAdded, тоже есть время ожидания в 30 секунд, но нет механизма запуска повторной попытки.
  • Приемники событий, которые были добавлены на хост-сайт без контекста приложения, например, с помощью SharePointOnlineCredentials или другими способами, не возвращают маркер доступа. Вы получите доступ к хост-сайту с помощью маркера доступа только для приложений.
  • Поддерживается добавление приемников событий к хост-сайту.
    • Это возможно сделать только с помощью API CSOM/REST, но не мастеров Visual Studio.
  • SharePoint обязательно вызывает конечные точки приемника событий, настроенные для данного события. Тем не менее нет никаких гарантий, что код в конечных точках приемника событий будет выполнен, потому что он выполняется не на сервере SharePoint.

Пример

Если URL-адрес конечной точки приемника событий недоступен, код приемника событий не будет выполнен. URL-адрес может быть недоступен по нескольким причинам. Основными из них являются неправильная настройка во время регистрации URL-адреса конечной точки, неполадки с DNS, возникающие при попытке решить проблемы с URL-адресом, и закрытие или нерабочее состояние сайта, размещающего конечную точку.

Кроме того, если в плохо написанном коде приемника событий есть ошибка, невозможно сообщить SharePoint о ее возникновении, поэтому событие придется выполнить заново. Эта проблема может быть частично решена с помощью приемников событий, подключенных к спискам SharePoint. Дополнительную информацию об этом способе см. ниже.

  • Если приемник события выполняет значительное количество кода, следует применить асинхронный шаблон.
  • Дополнительную информацию о времени ожидания в приемниках событий см. в приведенной ниже статье MSDN. (Найдите время ожидания в статье.) Обработка событий в надстройках для SharePoint (статья MSDN)
  • Если приемники событий работают вместе со списками SharePoint, рекомендуем использовать вместе с ними специальный механизм отслеживания изменений для обеспечения более качественного выполнения.

Отладка приемников событий

Чтобы выполнить отладку приемников событий, необходимо настроить несколько параметров в Azure и Visual Studio. Дополнительную информацию об отладке и пошаговые инструкции см. в следующей статье.

Другие примеры

  • Core.EventReceivers (пример PnP для Office 365)
    • В этом примере показано, как надстройка SharePoint может использовать событие AppInstalled для выполнения дополнительной работы на хост-сайте, например для прикрепления списков к приемникам событий.
  • Core.AppEvents.HandlerDelegation (пример PnP для Office 365)
    • В этом примере показано, как применять обработчики событий AppInstalled и AppUninstalling, которые:
      1. Отслеживают логику проверки отката, если обработчик обнаруживает ошибку.
      2. Отслеживают логику проверки выполненных действий с учетом того, что SharePoint может перезапускать обработчик до трех раз в случае обнаружения ошибки или если для завершения требуется более 30 секунд.
      3. Используют стратегию делегирования обработчиков, чтобы минимизировать количество вызовов от обработчика веб-службы в SharePoint.
      4. Используют классы CSOM ExceptionHandlingScope и ConditionalScope.
  • Core.AppEvents (пример PnP для Office 365)
    • В этом примере показано, как применять обработчики событий AppInstalled и AppUninstalling, которые:
      1. Отслеживают логику проверки отката, если обработчик обнаруживает ошибку.
      2. Отслеживают логику проверки выполненных действий с учетом того, что SharePoint может перезапускать обработчик до трех раз в случае обнаружения ошибки или если для завершения требуется более 30 секунд.

Образцы PnP

Область применения

  • Office 365 Multi Tenant (MT)
  • Office 365 Dedicated (D)
  • Локальное развертывание SharePoint 2013