代码之家  ›  专栏  ›  技术社区  ›  Bryant

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

  •  5
  • Bryant  · 技术社区  · 17 年前

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

    谢谢!

    2 回复  |  直到 17 年前
        1
  •  13
  •   Sean P. McDonough    17 年前

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

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

    关键在于将所讨论的代码实现为HttpModule(即实现IHttpModule接口的类型),并将其连接到ASP中。NET管道为您的SharePoint应用程序提供服务。大致来说,这些步骤是:

    1. 创建一个实现IHttpModule接口的类。
    2. 在HttpModule中实现Init方法;在设置HttpApplication(在本例中为SPHttpApplication)时调用此函数,它为您提供了执行处理、连接其他管道事件的事件委托等的机会。
    3. 创建一个SPFeatureReceiver,它将在激活和停用时分别在目标web.config文件中添加和删除HttpModule。这是使用SPWebConfigModification类型来更新<httpModules>目标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注册回调。

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

        2
  •  3
  •   x0n    17 年前

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

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

    莪相