繁体   English   中英

HttpModule似乎不起作用

[英]HttpModule doesn't seem to work

我创建了一个简单的HttpModule来记录我现有的webservice的用法。 有一个包含单个类的dll

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之后,我将它添加到webservice的bin文件夹中,并在webservice的web.config中添加:

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

这在我的计算机上工作正常,但当我将其复制到生产服务器时,没有任何反应。 数据库中没有新条目,ExceptionManager没有记录任何条目。 好像它根本不在那里。

我能错过什么?

编辑:执行另一个测试后,我可以添加它,当我为具有自己的顶级虚拟目录的webservice添加它时它可以工作。 它不适用于驻留在作为另一个虚拟目录的子文件夹的虚拟目录中的Web服务。

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

我相信我找到了更好的解决方案。 在运行时而不是在Web配置中附加模块。 查看Rick Strahl的博客文章了解详情。

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

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

我不喜欢它:(

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

哦,一点点的消除过程永远不会让我失望。

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

<system.webserver>

<模块>

而不是system.web ...至少它现在正在工作。

所以翻译一下:

如果您遇到httphandlers问题

将您的处理程序添加到system.webserver中的modules节点,并查看是否有效复制用于scriptmodule的格式。

这有用吗?

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

是否肯定会为每个请求调用context_BeginRequest方法?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM