【问题标题】:IHttpModule is not being called for my WebMethod没有为我的 WebMethod 调用 IHttpModule
【发布时间】:2011-09-02 16:25:22
【问题描述】:

好的,所以我有一个现有的应用程序,我已经向其中添加了一个自定义 HttpModule。我在 Init() 方法中注册了两个事件(PreRequestHandlerExecute 和 PostRequestHandlerExecute)。每个“正常”请求都会调用 HttpModule。但不是我创建了一个包含一些 WebMethods 的 .aspx,这些 WebMethods 被调用用于 ajaxifying 一些 UI 组件。 WebMethod 被很好地调用,但问题是我的 HttpModule 在访问 WebMethod 时根本没有被调用(没有事件,没有初始化,甚至没有构造函数)。当作为“正常”请求访问有问题的 .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:global.asax.cs 中的 BeginRequest 等在访问 WebMethod 时会被调用。 PS2:我在 Windows7 上运行 IIS7。

【问题讨论】:

标签: asp.net iis-7 httpmodule webmethod


【解决方案1】:

由于 PageMethods 必须是静态的,Page 类的所有事件和 ASP.NET 管道的实例永远不会发生。您只需获得 PageMethod 调用的结果,仅此而已。

【讨论】:

  • 我已切换到 WebService 而不是 WebMethod,它现在按预期工作!
【解决方案2】:

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

我不知道您的前置和后置请求处理程序是做什么的,但也许您可以将一些逻辑转移到 AcquireRequestState 事件处理程序中。

【讨论】:

  • 与此同时,我已经切换到 WebService 而不是 WebMethod 并且它按预期工作。所以我没有尝试挂钩 AcquireRequestState 和 ReleaseRequestState 事件,但由于构造函数和 init 方法都没有被调用,我怀疑这是否对我有用。
猜你喜欢
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多