我没有为我的WebMethod调用IHttpModule

时间:2011-09-02 16:25:22

标签: asp.net iis-7 httpmodule webmethod

好的,所以我有一个现有的应用程序,我添加了一个自定义的HttpModule。我正在Init()方法中注册两个事件(PreRequestHandlerExecute和PostRequestHandlerExecute)。每次“正常”请求都会调用HttpModule。但是我没有创建一个包含一些WebMethod的.aspx,这些WebMethod被调用来调整一些UI组件。 WebMethod被很好地调用,但问题是我的HttpModule在访问WebMethod时根本没有被调用(没有事件,没有init,甚至没有构造函数)。当访问有问题的.aspx作为“正常”请求时,模块会被很好地调用。但是在调用WebMethod时它拒绝被调用。

我的.aspx看起来像这样:

public partial class SelectionListService : System.Web.UI.Page
{
    [WebMethod]
    [ScriptMethod]
    public static RadComboBoxData GetItemsAsRadComboBoxData(RadComboBoxContext context)
    {
       ...
    }
}

我的HttpModule看起来像这样:

public class MyModule : IHttpModule, IRequiresSessionState
{
    public MyModule ()
    {
    }

    public void Init(HttpApplication context)
    {
        context.PreRequestHandlerExecute += new EventHandler(Application_PreRequestHandlerExecute);
        context.PostRequestHandlerExecute += new EventHandler(Application_PostRequestHandlerExecute);
    }

    private void Application_PreRequestHandlerExecute(object sender, EventArgs e)
    {
       ...
    }

    private void Application_PostRequestHandlerExecute(object sender, EventArgs e)
    {
       ...
    }
 }

我现在已经深入研究了一段时间,但我无法让它发挥作用。有什么想法吗?

PS1:在访问WebMethod时,会调用global.asax.cs中的BeginRequest等。 PS2:我在Windows7上运行IIS7。

2 个答案:

答案 0 :(得分:3)

因为PageMethods必须是静态的,所以Page类的实例及其所有事件和ASP.NET管道都不会发生。您只需获得PageMethod调用的结果即可。

答案 1 :(得分:1)

我有一个项目有同样的问题。我们发现,我们可以为WebMethods触发的管道中的第一个事件是AcquireRequestState事件。我们使用HttpModule与我们联系,以便进行应用程序所需的授权检查。

我不知道你的前后请求处理程序做了什么,但也许你可以把一些逻辑转移到AcquireRequestState事件处理程序。