2008-12-18 129 views
3

我创建了一个简单的HttpModule来记录我现有的webservice的用法。还有一个包含单个类HttpModule似乎不起作用

public class TrackingModule : System.Web.IHttpModule 
{ 
    public TrackingModule(){} 

    public void Init(System.Web.HttpApplication context) 
    { 
     context.BeginRequest+=new EventHandler(context_BeginRequest); 
    } 

    public void Dispose() 
    { 

    } 

    private void context_BeginRequest(object sender, EventArgs e) 
    { 
     try 
     { 
      Microsoft.ApplicationBlocks.ExceptionManagement.ExceptionManager.Publish(new Exception("Log attept")); 
      HttpApplication app = (HttpApplication)sender; 
      string method = app.Request.RawUrl; 
      SaveUseToDatabase(app.Request.UserHostAddress, method); 
     } 
     catch(Exception ex) 
     { 
      try 
      { 
       Microsoft.ApplicationBlocks.ExceptionManagement.ExceptionManager.Publish(ex); 
      } 
      catch{} 
     } 
    } 
} 

一个dll编译的dll我把它添加到Web服务的bin文件夹和Web服务的web.config后,我补充一下:

<system.web> 
    <httpModules> 
     <add name="TrackingModule" type="WebserviceTrackingModule.TrackingModule, WebserviceTrackingModule"/> 

这在我的电脑上工作正常,但是当我将它复制到生产服务器,没有任何反应。数据库中没有新条目,没有条目由ExceptionManager记录。仿佛它根本就没有。

我可以错过什么?

编辑: 执行另一个测试后,我可以补充说,它适用于具有自己的顶级虚拟目录的web服务时。它不适用于位于另一个虚拟目录的子文件夹的虚拟目录中的Web服务。

我知道HttpModules设置正在被子目录继承,但它看起来像父目录存在的方式。

回答

3

我相信我已经找到了更好的解决方案。在运行时而不是在Web配置中附加模块。详细信息请查看Rick Strahl's blog post

+0

我有一个WCF服务应用程序,它是主站点下的虚拟目录。通过web.config添加我的模块导致了一个IIS 500错误,没有任何关于错误的细节(我期望在Windows事件日志中看到一些东西,但什么都没有)。 Rick Strahl的技术非常完美(尽管我花了一段时间才意识到必须从Studio中添加一个“全局应用程序类”,并且Global.asax文件必须部署到我的站点)。 – 2013-08-23 21:37:33

0

这是行不通的吗?

<add name="TrackingModule" type="WebserviceTrackingModule.TrackingModule" /> 

而且是每个请求肯定会调用的context_BeginRequest方法吗?

+0

是的,它既可以在我的开发机器上运行,也可以在其他web服务的生产服务器上运行。正如我现在在问题描述中添加的,问题可能来自父目录... – user34402 2008-12-18 15:31:27

1

好的,我正在回答我自己的问题。

当您在子目录的web.config中定义<httpModules>时,即使将子目录配置为应用程序,它也不起作用。我目前发现的唯一解决方案是在根应用程序(父目录)的web.config中的<位置>标记中定义它们。

我不喜欢它:(

1

我找到了这个问题的答案在http://forums.iis.net/t/1151924.aspx

哦,有点 消除过程中,从来没有失败 我。

在注意到与3.5相关的 web.config代码后,我意识到我的 模块需要添加到新的 部分:

<system.webserver>

        <模块>

代替的System.Web ......至少是现在 工作。

所以翻译是:

如果您有HttpHandlers的

问题的处理程序添加到模块节点system.webserver,看看是否能工程 复制用于scriptmodule格式。

+1

我目前遇到同样的问题,但这似乎并没有为我“做窍门”...一切正常开发机器(Windows 7 + Visual Web Developer 2008 Express),但是当我部署到生产服务器(Windows 2003)时,它不起作用。 – XpiritO 2010-09-16 15:18:41