Как вы можете подключить функцию SharePoint 2007 к Application_Start сайта? - PullRequest
5 голосов
/ 23 сентября 2008

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

Спасибо!

Ответы [ 2 ]

13 голосов
/ 25 июня 2009

Это на самом деле возможно, но это не относится к файлу 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 для обновления узла в целевых файлах 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.

.

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

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

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

3 голосов
/ 24 сентября 2008

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

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

Oisin

...