Приемники событий и приемники событий списков в модели надстроек 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, рекомендуем использовать вместе с ними специальный механизм отслеживания изменений для обеспечения более качественного выполнения.
- Дополнительную информацию об этом шаблоне и его применении см. в приведенном ниже примере кода PnP для Office 365. Core.ListItemChangeMonitor (пример PnP для Office 365)
Отладка приемников событий
Чтобы выполнить отладку приемников событий, необходимо настроить несколько параметров в Azure и Visual Studio. Дополнительную информацию об отладке и пошаговые инструкции см. в следующей статье.
Другие примеры
- Core.EventReceivers (пример PnP для Office 365)
- В этом примере показано, как надстройка SharePoint может использовать событие AppInstalled для выполнения дополнительной работы на хост-сайте, например для прикрепления списков к приемникам событий.
- Core.AppEvents.HandlerDelegation (пример PnP для Office 365)
- В этом примере показано, как применять обработчики событий AppInstalled и AppUninstalling, которые:
- Отслеживают логику проверки отката, если обработчик обнаруживает ошибку.
- Отслеживают логику проверки выполненных действий с учетом того, что SharePoint может перезапускать обработчик до трех раз в случае обнаружения ошибки или если для завершения требуется более 30 секунд.
- Используют стратегию делегирования обработчиков, чтобы минимизировать количество вызовов от обработчика веб-службы в SharePoint.
- Используют классы CSOM ExceptionHandlingScope и ConditionalScope.
- В этом примере показано, как применять обработчики событий AppInstalled и AppUninstalling, которые:
- Core.AppEvents (пример PnP для Office 365)
- В этом примере показано, как применять обработчики событий AppInstalled и AppUninstalling, которые:
- Отслеживают логику проверки отката, если обработчик обнаруживает ошибку.
- Отслеживают логику проверки выполненных действий с учетом того, что SharePoint может перезапускать обработчик до трех раз в случае обнаружения ошибки или если для завершения требуется более 30 секунд.
- В этом примере показано, как применять обработчики событий AppInstalled и AppUninstalling, которые:
Связанные ссылки
- Часто задаваемые вопросы об удаленных приемниках событий в SharePoint 2013 (статья MSDN)
- Создание удаленного приемника событий в надстройках для SharePoint (статья MSDN)
- Создание приемника событий приложения в SharePoint 2013 (статья MSDN)
- Статьи руководства на https://aka.ms/OfficeDevPnPGuidance
- Ссылки в MSDN на https://aka.ms/OfficeDevPnPMSDN
- Видео на https://aka.ms/OfficeDevPnPVideos
Образцы PnP
- Core.ListItemChangeMonitor (пример PnP для Office 365)
- Core.EventReceivers (пример PnP для Office 365)
- Core.AppEvents.HandlerDelegation (пример PnP для Office 365)
- Core.AppEvents (пример PnP для Office 365)
- Примеры и содержимое на сайте https://github.com/SharePoint/PnP
Область применения
- Office 365 Multi Tenant (MT)
- Office 365 Dedicated (D)
- Локальное развертывание SharePoint 2013