如何将SharePoint 2007功能挂钩到站点的Application_Start中?

时间:2008-09-23 16:41:30

标签: sharepoint sharepoint-2007 global-asax application-start

我想知道在开发功能时是否有一种很好的方法可以挂钩到SharePoint 2007网站的Application_Start?我知道我可以直接编辑站点根目录中的Global.asax文件,但有没有办法实现这一点,以便部署该功能?

谢谢!

2 个答案:

答案 0 :(得分:13)

这实际上是可行的,但它不涉及Global.asax文件。

Microsoft的许多示例通过Global.asax演示了接线代码,但在SharePoint方面,这不是最佳实践方法。理想情况下,您的代码应作为功能打包并通过WSP进行部署(如您所知)。

关键在于将有问题的代码实现为HttpModule(即实现IHttpModule接口的类型)并将其连接到为SharePoint应用程序提供服务的ASP.NET管道中。粗略地说,这些是步骤:

  1. 创建一个实现IHttpModule接口的类。
  2. 在HttpModule中实现Init方法;这是在设置HttpApplication(在本例中为SPHttpApplication)时调用的,它为您提供了为其他管道事件执行处理,连接事件委托等的机会。
  3. 创建一个SPFeatureReceiver,它将分别在激活和停用时从目标web.config文件添加和删除HttpModule。这是使用SPWebConfigModification类型来更新< httpModules>目标web.config文件中的节点。
  4. 将所有功能打包为功能并通过WSP进行部署。
  5. 有关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注册自己的回调。

    虽然你的问题有点老了,但我希望这会有所帮助!

答案 1 :(得分:3)

我对此的直觉是,这是不可能的。当asp.net引擎启动时,运行时调用Application_Start,因此很可能无法以任何方式挂钩修改Global.asax之外的处理程序 - 例如钩子必须是声明性的和持久的,因为它必须在应用程序停止/卸载时存活。所以,如果你必须写入global.asax,我想你可以编写一个Feature EventReceiver来执行修改。

除此之外,你能否详细说明原因?也许还有其他攻击角度。在飞行中修改global.asax的想法让​​我感到恶心。这不可能是好事。

[287]莪