5

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

谢谢!

4

2 回答 2

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 类型更新目标 web.config 文件中的 <httpModules> 节点来执行的。
  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 启动时注册自己以进行回调。

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

于 2009-06-25T02:31:07.560 回答
3

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

除此之外,您能否详细说明原因?也许还有其他攻击角度。即时修改 global.asax 的想法让我感到不舒服。那可不好。

奥辛

于 2008-09-24T15:48:00.290 回答