【问题标题】:Implemented IHttpModule class events does not firing, SharePoint 2010 issue实施的 IHttpModule 类事件未触发,SharePoint 2010 问题
【发布时间】:2012-10-07 15:05:41
【问题描述】:

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

我发现 two way 来区分。

第一个建议在 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("/")

【问题讨论】:

  • 你应该把它分成一个单独的问题。

标签: sharepoint global-asax ihttpmodule


【解决方案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 模块是完全可以的。

【讨论】:

  • 谢谢!你的建议是正确的!但是我有另一个问题是“服务器操作在这种情况下不可用”。我也发布了代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
相关资源
最近更新 更多