Wir haben einen HttpHandler, der direkt mit binären Posts über HTTP von kundenspezifischer Client-Software handelt. Die Client-Software sendet gelegentlich Daten, die dazu führen, dass IIS 7 mit einer 400 - Fehleranforderung antwortet. Da die "400 Bad Request" speziell darin ist, dass HTTP.SYS es transparent im Kernel-Modus behandelt, ohne den Benutzermodus von irgendetwas zu benachrichtigen, werden in ASP.NET keine Fehler ausgelöst. Ist es möglich, dieses http 400 in ASP.NET abzufangen, damit ich in diesen Szenarien bestimmte Daten in den Antwort-Stream schreiben kann? Eine Umleitung zu einer anderen Seite ist keine Option, da sie in der aktuellen Anfrage / Antwort enthalten sein muss.
Wenn Sie wissen, was die 400 verursacht, können Sie möglicherweise das Verhalten von http.sys über die Registrierung anpassen, um damit umzugehen:
Sie sollten sich jedoch bewusst sein, dass dies potenzielle Sicherheits- und Leistungseinbußen zur Folge hat.
Eine andere Option wäre, einen Filter-Proxy vor IIS zu verwenden, um die Anfrage zu erfassen, bevor sie weiter geht.
Ich würde sie stattdessen bitten, die benutzerdefinierte Client-Software zu reparieren. Geben Sie ihnen einen Bericht mit den fehlgeschlagenen Anfragen. Wenn Sie dazu in der Lage sind, führen Sie einen Sniffer wie Wireshark und schicken Sie ihnen die Pakete, wenn sie nicht glauben, dass das Problem mit ihrer Software ist.
Wenn Ihr benutzerdefinierter Client bewirkt, dass IIS HTTP 400 auslöst, ist er wahrscheinlich fehlerhaft und sendet keine gültigen HTTP-Anforderungen gemäß dem Standard. Wenn Sie den Client ändern können, wäre es das Richtige. Ansonsten arbeiten Sie nicht mit HTTP und IIS ist für die Verarbeitung von HTTP-Anforderungen ausgelegt. Daher sollten Sie einen benutzerdefinierten Server für Ihr eigenes Protokoll ausführen (was eine nicht standardmäßige HTTP-ähnliche Sache ist).
Es wird nicht empfohlen, IIS / ASP.NET zu verwenden, um eine solche Anfrage zu bearbeiten, da dies zu merkwürdigen unerwarteten Ereignissen führen kann.
Tags und Links c# asp.net http iis-7 httphandler