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

如何将SharePoint2007功能连接到网站的应用程序启动?

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

    我想知道在开发一个功能时,是否有一个很好的方法可以连接到SharePoint2007网站的应用程序?我知道我可以直接在站点根目录中编辑global.asax文件,但是有没有一种方法可以这样做,这样它就可以用这个特性进行部署?

    谢谢!

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

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

    许多微软的例子都通过global.asax演示了连接代码,但对于SharePoint来说,这不是一种最佳实践方法。理想情况下,您的代码应该打包为一个特性,并通过wsp进行部署(正如您已经知道的那样)。

    关键在于将相关代码实现为httpmodule(即实现ihtpmodule接口的类型),并将其连接到为SharePoint应用程序提供服务的ASP.NET管道中。大致来说,步骤如下:

    1. 创建实现IHttpModule接口的类。
    2. 在httpmodule中实现in it方法;在设置http应用程序(在本例中为sphtpapplication)时调用该方法,它使您有机会执行处理、为其他管道事件连接事件委托等。
    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)中使用了这个方法,它在启动时需要在sphtpapplication中注册回调。

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

        2
  •  3
  •   x0n    16 年前

    我的直觉是这是不可能的。当ASP.NET引擎正在启动时,运行时会调用应用程序启动,因此很可能无法在修改global.asax之外挂接处理程序-例如,挂接必须是声明性的和持久的,因为它必须在应用程序停止/卸载后生存。因此,如果必须写入global.asax,我想您可以编写一个特性eventreceiver来执行修改。

    除此之外,你能提供更多关于原因的细节吗?也许还有其他的攻击角度。在飞行中修改global.asax的想法让我感觉不舒服。那不太好。

    莪相