回答

13

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

许多微软的例子都通过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

结果:可处理应用程序启动并可通过功能部署的类。没有手动文件黑客要求。

我已经在很多场景中成功地使用了它 - 最近有一个自定义缓存提供程序(IVaryByCustomHandler)需要在SPHttpApplication启动时自行注册回调。

虽然你的问题有点老,我希望这有助于!

3

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

除此之外,你可以给出更多的细节,为什么?也许还有其他的攻击角度。即时修改global.asax的想法让​​我感觉不舒服。那不好。

[287]莪

相关问题