5

Мне было интересно, есть ли хороший способ подключиться к Application_Start сайта SharePoint 2007 при разработке функции? Я знаю, что могу напрямую редактировать файл Global.asax в корне сайта, но есть ли способ сделать это, чтобы он развернулся с помощью этой функции?Как вы можете подключить функцию SharePoint 2007 к Application_Start сайта?

Спасибо!

ответ

13

Это действительно возможно, но это не влечет за собой файл Global.asax.

Многие примеры Microsoft демонстрируют код проводки через Global.asax, но это не лучший подход, когда дело доходит до SharePoint. В идеале ваш код должен быть упакован как функция и развернут через WSP (как вы уже знаете).

Ключ заключается в реализации рассматриваемого кода в качестве HttpModule (то есть типа, реализующего интерфейс IHttpModule) и проводки его в конвейер ASP.NET, обслуживающий ваше приложение SharePoint. Грубо говоря, это шаги:

  1. Создайте класс, который реализует интерфейс IHttpModule.
  2. Внесите метод Init в ваш HttpModule; это вызывается, когда HttpApplication (в данном случае, SPHttpApplication) настроен, и это дает вам возможность выполнять обработку, делегировать события события для других событий конвейера и т. д.
  3. Создайте SPFeatureReceiver, который будет добавлять и удалите свой HttpModule из целевых файлов web.config при активации и деактивации, соответственно. Это выполняется с использованием типа SPWebConfigModification для обновления узла <httpModules> в целевых файлах web.config.
  4. Пакет все как функция и развертывание через WSP.

Для получения дополнительной информации о разработке HttpModule см. http://msdn.microsoft.com/en-us/library/ms227673.aspx. Дополнительные сведения о типе SPWebConfigModification см. В разделе http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebconfigmodification.aspx.

Результат: класс, который может обрабатывать запуск приложения и развертывается через функцию. Никаких ручных файлов не требуется.

Я успешно использовал это в нескольких сценариях - совсем недавно с помощью специального кэширующего провайдера (IVaryByCustomHandler), который должен был зарегистрироваться для обратных вызовов с помощью SPHttpApplication при его запуске.

Хотя ваш вопрос немного старше, я надеюсь, что это поможет!

3

Мое ощущение кишки на этом то, что это будет невозможно. Application_Start вызывается средой выполнения, когда запускается механизм asp.net, поэтому, скорее всего, не может быть никакого способа привязать обработчик вне модификации Global.asax - например, крючок должен быть декларативным и постоянным, так как он должен выдержать остановку/разгрузку приложения. Итак, если вам нужно написать global.asax, я думаю, вы могли бы написать Feature EventReceiver для выполнения модификации.

В стороне, можете ли вы дать более подробную информацию о причинах? Возможно, есть и другие углы атаки. Идея изменить global.asax на лету заставляет меня чувствовать себя плохо. Это не может быть хорошо.

Oisin

 Смежные вопросы

  • Нет связанных вопросов^_^