Problem mit Managed Module in IIS7 IntegratedMode



  • Hallo zusammen
    Ich habe folgendes äusserst seltsames Verhalten des IIS entdeckt:
    In der web.config Datei habe ich unter Anderem folgendes stehen:

    <modules runAllManagedModulesForAllRequests="true">
      <add name="MyModule" type="MyProject.MyModule" />
     </modules>
    

    Wenn ich nun folgende URL aufrufe: http://localhost/token01/token02/index.html,
    funktioniert alles wie erwartet und das Modul wird aufgerufen.

    Bei dieser URL: http://localhost/token01/token02/token03/index.html kommt hingegen eine 404 Fehlermeldung zurück, OHNE dass das Modul aufgerufen wird.

    Tatsächlich wird das Modul niemals aufgerufen, wenn die Pfadtiefe grösser als 3 ist 🙄

    Weiss vielleicht jemand, was dass soll??

    P.S.
    Keiner der Pfade existiert auf dem Server...



  • Ich konnte mittlerweile mit den Ablaufverfolgungsregeln für Anforderungfehler herausfinden, dass die URL http://localhost/token01/token02/index.html vom ManagedPipelineHandler, die URL http://localhost/token01/token02/token03/index.html jedoch vom IIS Web Core behandelt wird??
    Ich meine, welchen Teil von runAllManagedModulesForAllRequests="true" versteht der IIS nicht?



  • Ich konnte nun die Ursache für das oben beschriebene Phänomen lokalisieren:

    routes.MapRoute(
           "Default", // Route name
           "{controller}/{action}/{id}", // URL with parameters
           new { controller = "Home",action = "Index",id = UrlParameter.Optional } // Parameter defaults
       );
    

    Dies führt offenbar dazu, dass URL's bis zu drei slashes irgendwie in ASP .NET geroutet wird, während alles andere auf den staticHandler gemappt wird.

    Ich dachte aber, dass der IntegratedMode genau dafür sei, dass bei diesem die ManagedModule auch für nicht ASP. NET Handler aufgerufen werden?

    Also eigentlich habe ich nur folgende IMHO sehr einfache Anforderung:
    Ich möchte, dass sämtliche URL's die mit /dav/ beginnen, von einem spezifischen IHttpHandler ausgeführt werden, unabhängig, ob die Resource existiert oder nicht. Zuerst habe ich es mit einem Handlereintrag in web.config versucht, doch das scheiterte, weil er da offenbar nur auf die Dateiendung achtet, was nicht ausreicht. Danach versuchte ich es mit einem IHttpModule, welches den PostMapRequestHandler abfängt und mein Handler zuweist, wenn der Pfad mit /dav/ beginnt. Dies funktioniert nun offenbar auch nicht, weil das Modul nicht immer aufgerufen wird. Schliesslich versuchte ich es mit dem Asp .Net Routing, was aber auch nicht funktioniert, da dieser offenbar darauf beschränkt ist, URL Tokens in Get Parameter umzuwandeln.

    Also WTF? :p Was ich da vorhabe ist doch Mein Gott nicht so weltfremd?

    Mfg Samuel

    Das kann doch nicht so schwer sein?


Anmelden zum Antworten