1

我正在开发 sharepoint 2010 网络应用程序。我想通过使用从 SPHttpApplication 继承的 Global.asax 以经典的 asp.net 方式处理一些 Applicaton 事件(Begin_Request、End_Request、Application_Start)。

我找到 了两种 区分的方法。

第一个建议在 Global 类中重载 SPHttpApplication 。好主意,但不适合我,因为我的应用程序部署到另一个主站点的子站点。如果有办法绕过这一刻,那将是一个很好的解决方案!

第二个建议实现 IHttpModule 接口并从 HttpApplication 上下文变量注册事件。它适合我,我创建了一个类库项目,其中一个类实现了这个接口。我还在 web.config 文件中添加了特殊记录:

<httpModules>
    <add name="DSModule" type="Artec.DS.HttpContext.DSModule, DSModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31a3567341f39f94"/>
</httpModules>

其中“Artec.DS.HttpContext”是项目名称,DSModule 是类名称。毕竟,当我开始调试时,不会调用“Init()”方法。

更新

namespace Artec.DS.HttpContext
{
    public class DSModule : IHttpModule
    {
        public void Dispose()
        {
           throw new NotImplementedException();
        }

        public void Init(HttpApplication context)
        {
            System.Diagnostics.Debugger.Launch();

            ApplicationVariables.AppPath = context.Server.MapPath("/");
            NhibernateManager.Init();
            NavigationManager.Init();
        }
    }
}

首先我的 web.config 有错误的“类型”属性。我对类名而不是程序集名感到困惑。所以格式良好的标签如下:

<add name="DSModule" type="Artec.DS.HttpContext.DSModule, Artec.DS.HttpContext, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31a3567341f39f94" />

修改 web.config system.webServer/modules 后(感谢CBono) Init() 被调用,这是我最初问题的答案。

但现在我收到错误:“System.Web.HttpException:服务器操作在此上下文中不可用。” 尝试映射服务器路径时:

context.Server.MapPath("/")
4

1 回答 1

1

如果您的 IIS 实例是版本 6,或者您在版本 7 经典模式下运行,则您列出的 web.config 条目是合适的。

尝试将其添加到您的 web.config 以涵盖 IIS 7 集成模式(您可能正在使用):

<configuration>
  <system.webServer>
    <modules>
      <add name="DSModule" type="Artec.DS.HttpContext.DSModule, DSModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31a3567341f39f94"/>
    </modules>
  </system.webServer>
</configuration>

在这两个部分都注册您的 HTTP 模块是完全可以的。

于 2012-10-17T13:11:30.193 回答