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

时间:2020-03-06 14:36:37  来源:igfitidea点击:

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

谢谢!

解决方案

我对此的直觉是不可能的。当asp.net引擎启动时,运行时会调用Application_Start,因此很可能无法通过任何方式将处理程序挂接到修改Global.asax的外部,例如该钩子必须是声明性的并且是持久的,因为它必须在应用程序停止/卸载过程中生存下来。因此,如果我们必须写入global.asax,我想我们可以编写Feature EventReceiver来执行修改。

除此之外,我们能否提供更多有关原因的详细信息?也许还有其他的攻击角度。即时修改global.asax的想法让​​我感到不舒服。那不是很好。

爱信

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

Microsoft的许多示例都演示了如何通过Global.asax连接代码,但这并不是SharePoint的最佳实践方法。理想情况下,我们应该将代码打包为功能部件,并通过WSP进行部署(如我们所知)。

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

  • 创建一个实现IHttpModule接口的类。
  • 在HttpModule中实现Init方法;设置HttpApplication(在本例中为SPHttpApplication)时会调用此方法,它使我们有机会进行处理,为其他管道事件关联事件委托等。
  • 创建一个SPFeatureReceiver,它将在激活和停用时分别从目标web.config文件中添加和删除HttpModule。这是使用SPWebConfigModification类型执行的,以更新目标web.config文件中的<httpModules>节点。
  • 将所有功能打包,并通过WSP进行部署。

有关HttpModule开发的更多信息,请参见http://msdn.microsoft.com/zh-cn/library/ms227673.aspx。有关SPWebConfigModification类型的其他详细信息,请参阅http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.administration.spwebconfigmodification.aspx。

结果:一个可以处理应用程序启动并且可以通过Feature进行部署的类。无需手动文件黑客攻击。

我已经在许多情况下成功使用了此方法-最近使用的是自定义缓存提供程序(IVaryByCustomHandler),该提供程序需要在SPHttpApplication启动时为回调进行自身注册。

尽管问题有点老了,但希望对我们有所帮助!