2 votes

IHttpModule n'est pas appelé pour mon WebMethod

Ok, j'ai donc une application existante à laquelle j'ai ajouté un HttpModule personnalisé. J'enregistre deux événements dans la méthode Init() (PreRequestHandlerExecute et PostRequestHandlerExecute). Le HttpModule est appelé pour chaque requête "normale". Mais non, j'ai créé un .aspx contenant quelques WebMethods qui sont appelés pour ajaxifier certains composants de l'interface utilisateur. La WebMethod est bien appelée, mais le problème est que mon HttpModule n'est PAS du tout appelé (pas d'événements, pas d'init, même pas de constructeur) lors de l'accès à la WebMethod. Le module est bien appelé lorsqu'on accède au .aspx en question comme une requête "normale". Mais il refuse d'être appelé lors de l'appel de la WebMethod.

Mon .aspx ressemble à ceci :

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

Mon HttpModule ressemble à ceci :

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)
    {
       ...
    }
 }

Je me suis penché sur la question depuis un certain temps déjà, mais je n'arrive pas à la faire fonctionner. Avez-vous des idées ?

PS1 : le BeginRequest, etc. dans global.asax.cs est appelé lors de l'accès à la WebMethod. PS2 : J'utilise IIS7 sur Windows7.

3voto

Peter Bromberg Points 1066

Comme les PageMethods doivent être statiques, une instance de la classe Page avec tous ses événements et le pipeline ASP.NET ne se produit jamais. Vous obtenez simplement le résultat de votre appel PageMethod, et c'est tout.

1voto

Brian Dishaw Points 3522

J'ai un projet qui a eu le même problème. Nous avons découvert que le premier événement du pipeline que nous pouvions faire déclencher pour l'événement WebMethods était le AcquireRequestState événement. Nous nous y sommes accrochés avec notre HttpModule afin d'effectuer le contrôle d'autorisation requis pour l'application.

Je ne sais pas ce que font vos gestionnaires de requêtes pré et post, mais vous pourriez peut-être transférer une partie de la logique dans le module de gestion des requêtes. AcquireRequestState gestionnaire d'événements.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X