【发布时间】: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