【问题标题】:How can you hook a SharePoint 2007 feature into the Application_Start of a site?如何将 SharePoint 2007 功能连接到网站的 Application_Start?
【发布时间】:2008-09-23 16:41:29
【问题描述】:

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

    这其实是可以的,但是不涉及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 文件中的 节点来执行的。
    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

    Result:一个可以处理应用程序启动并且可以通过 Feature 部署的类。无需手动破解文件。

    我已经在许多场景中成功使用了它——最近一次是使用自定义缓存提供程序 (IVaryByCustomHandler),它需要在 SPHttpApplication 启动时为回调注册自身。

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

    【讨论】:

      【解决方案2】:

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

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

      欧辛

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-15
        • 2023-04-04
        • 2010-10-30
        • 1970-01-01
        相关资源
        最近更新 更多