2008-12-04 62 views
9

我們有一個HttpHandler直接處理來自定製客戶端軟件的HTTP上的二進制文章。客戶端軟件偶爾會發送導致IIS 7響應400-Bad Request的數據。由於「400錯誤請求」的特殊之處在於,HTTP.SYS在內核模式下透明地處理它,而不通知用戶模式的任何內容,因此不會在ASP.NET中處理錯誤。是否有可能在ASP.NET中捕獲這個http 400,以便我可以在這些場景中將特定數據寫入Response流?重定向到另一個頁面不是一個選項,因爲它需要在當前的請求/響應中。ASP.NET HttpHandler可以處理HTTP 400 - 錯誤請求嗎?

+1

如果這個問題是「把你最喜歡的HTTP.SYS和HTTP 400笑話放在這裏」,那麼現在至少會有238位受訪者回答。 – cfeduke 2008-12-04 22:40:43

+0

你在IIS7的集成管道模式或經典模式下運行嗎?我不確定,但是當使用集成模式時,您可能會看到錯誤,因爲「所有內容」都通過ASP.NET管道。在經典模式下,我認爲你是SOL。但我不確定。 – 2008-12-06 21:35:31

回答

2

如果你知道是什麼原因造成了400,那麼你可以通過註冊表來定製HTTP.SYS的行爲來對付它:

http://support.microsoft.com/kb/820129

但是,你應該知道,這樣做有潛在的安全和性能影響。

另一種選擇是在IIS之前使用過濾代理,從而在請求進一步前捕獲請求。

+0

錯誤來自無效內容長度標題,根據此:http://technet.microsoft.com/en-us/library/cc786188.aspx 不能自定義。看起來,如果沒有基本編寫自己的http服務器,這可能是不可能的。 – duckworth 2008-12-05 12:41:42

1

如果您的自定義客戶端導致IIS觸發HTTP 400,則可能存在缺陷並且未按照標準提交有效的HTTP請求。如果你可以改變客戶,這是正確的做法。否則,你正在使用的不是HTTP,並且IIS旨在處理HTTP請求。因此,你應該爲自己的協議運行一個自定義的服務器(這是一個非標準的HTTP類似的東西)。

建議不要使用IIS/ASP.NET來處理這樣的請求,因爲它可能會導致一些奇怪的意外事件發生。

2

我會讓他們修復自定義客戶端軟件。爲他們提供一份報告,顯示失敗的請求。如果你能夠運行Wireshark這樣的嗅探器,並且如果他們不相信他們的軟件存在問題,就可以發送數據包。