2009-07-14 8 views
1

Ich verwende eine ASP.NET-Anwendung mit einem benutzerdefinierten Modul, das unter IIS7 registriert ist.IIS7 hängt am AuthenticateRequest-Status im Modul WindowsAuthentication

Bis vor zwei Tagen lief alles gut. Jetzt stelle ich fest, dass die Anforderungen im AuthenticateRequest-Status und im WindowsAuthentication-Modul hängen geblieben sind. Mein benutzerdefiniertes Modul wird beim BeginRequest-Status abgefangen und verarbeitet die Anforderungen und schließt die Anforderungsverarbeitung mit HttpContext.Current.ApplicationInstance.CompleteRequest() ab. Die Anforderungen, die nicht verarbeitet werden, verbleiben für IIS, um sie durch die anderen Module zur Verarbeitung zu leiten.

Das Problem (die Anforderung hängen) tritt auf Seiten auf, die mein benutzerdefiniertes Modul nicht verarbeitet.

Irgendwelche Ideen, wo ich anfangen sollte, dieses Problem zu beheben? Dieses Problem habe ich heute auf drei verschiedenen Maschinen konsequent reproduziert. Ich habe auch festgestellt, dass wir unsere Datei web.config im letzten Monat nicht geändert haben.

Jede Hilfe zur Behebung dieses Problems wird sehr geschätzt.

Vielen Dank im Voraus, Charles Prakash Dasari

Antwort

0

Schließlich fand ich die Lösung für mein Problem.

Das benutzerdefinierte Modul I implementiert haben Asynchron-Handler verwendet:

 context.AddOnBeginRequestAsync(
      new BeginEventHandler(BeginBeginRequest), 
      new EndEventHandler(EndBeginRequest) 
     ); 

In dem Fall, dass mein Modul kann die Anforderung nicht verarbeiten, der Ereignishandler beginnen vervollständigt die Anforderung und hat nichts damit zu tun. Bis vor ein paar Tagen bin ich in einen anderen Thread gesprungen, um diese Anfragen mit der Begin-Methode zu bearbeiten. Kürzlich habe ich es so korrigiert, dass ich nur dann in einen anderen Thread abbreche, wenn mein Modul die Anfrage bearbeiten muss. Jetzt hat dies das Problem verursacht. Anscheinend gefällt es IIS nicht, dass ich meine Verarbeitung im selben Thread beende.

So jetzt springe ich wieder zu einem anderen Thread - egal was. IIS ist glücklich und meine App hängt nicht mehr.

Ich muss noch weiter untersuchen und stellen Sie sicher, warum das passiert - oder wenn es ein Fehler wirklich in IIS ist oder in der Art, wie ich das IAsyncResult von BeginBeginRequest-Methode zurückgeben. Aber jetzt weiß ich, dass ich diese Anfrage in einem anderen Thread bearbeiten muss.