2008-12-04 36 views
9

Chúng tôi có một HttpHandler giao dịch trực tiếp với các bài đăng nhị phân qua HTTP từ phần mềm ứng dụng khách tùy chỉnh. Phần mềm máy khách thỉnh thoảng gửi dữ liệu mà kết quả trong IIS 7 đáp ứng với yêu cầu 400 - Bad. Kể từ khi "Yêu cầu 400" là đặc biệt trong HTTP.SYS minh bạch xử lý nó trong chế độ hạt nhân mà không thông báo cho chế độ người dùng của bất cứ điều gì, không có lỗi được nêu ra để được xử lý trong ASP.NET. Có thể bắt http 400 này trong ASP.NET, để tôi có thể ghi dữ liệu cụ thể vào luồng Response trong các tình huống này không? Chuyển hướng đến trang khác không phải là tùy chọn vì nó cần phải có trong Yêu cầu/phản hồi hiện tại.ASP.NET HttpHandler có thể xử lý http 400 - Yêu cầu không hợp lệ không?

+1

Nếu câu hỏi này là "đặt HTTP.SYS yêu thích của bạn và http 400 câu chuyện cười ở đây", nó sẽ được trả lời bởi ít nhất 238 người trả lời ngay bây giờ. – cfeduke

+0

Bạn có đang chạy trong chế độ đường ống tích hợp của IIS7 hoặc chế độ cổ điển không? Tôi không chắc chắn, nhưng bạn * có thể * có thể thấy lỗi khi sử dụng chế độ tích hợp vì "mọi thứ" đi qua đường dẫn ASP.NET. Ở chế độ cổ điển, tôi nghĩ bạn là SOL. Nhưng tôi không chắc chắn. –

Trả lời

2

Nếu bạn biết những gì đang gây ra 400, sau đó bạn có thể tùy chỉnh các hành vi của http.sys qua registry để đối phó với nó:

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

Tuy nhiên, bạn nên biết rằng có các nhánh an ninh và hiệu suất tiềm năng để thực hiện việc này.

Một tùy chọn khác sẽ là sử dụng proxy lọc trước IIS, từ đó bắt giữ yêu cầu trước khi tiếp tục.

+0

Lỗi là từ tiêu đề độ dài nội dung không hợp lệ, theo đó: http://technet.microsoft.com/en-us/library/cc786188.aspx không thể được tùy chỉnh. Có vẻ như không thể thực hiện được nếu không viết về máy chủ http của chính bạn vào thời điểm này. – duckworth

1

Nếu máy khách tùy chỉnh của bạn khiến IIS kích hoạt HTTP 400, có thể là thiếu sót và không gửi yêu cầu HTTP hợp lệ theo tiêu chuẩn. Nếu bạn có thể thay đổi khách hàng, nó sẽ là điều đúng đắn để làm. Nếu không, những gì bạn đang làm việc với không phải là HTTP và IIS được thiết kế để xử lý các yêu cầu HTTP. Vì vậy, bạn nên chạy một máy chủ tùy chỉnh cho giao thức của riêng bạn (đó là một HTTP không chuẩn).

Không nên sử dụng IIS/ASP.NET để xử lý yêu cầu như vậy vì nó có thể gây ra một số điều bất ngờ kỳ lạ xảy ra.

+0

Lỗi là do tiêu đề độ dài nội dung không hợp lệ từ tải trọng bị hỏng. Thay đổi phần mềm máy khách không phải là một lựa chọn và tôi chỉ cần gửi một câu trả lời http tùy chỉnh để thông báo cho khách hàng để xóa tải trọng của nó, nhưng không có cách nào để tôi bẫy lỗi 400 và gửi cho khách hàng bất cứ thứ gì. – duckworth

+0

Bất kể nó là gì, những gì bạn cần là một máy chủ xử lý giao thức không chuẩn (= tiêu chuẩn với lỗi triển khai). Bạn có lẽ nên viết một máy chủ tùy chỉnh xử lý vấn đề này. Tôi nghĩ giải pháp lọc proxy của Dave R. là ý tưởng tốt nhất. Bất kỳ giải pháp là một hack xấu xí tuy nhiên. –

2

Thay vào đó, tôi sẽ yêu cầu họ sửa phần mềm ứng dụng khách tùy chỉnh. Cung cấp cho họ báo cáo hiển thị các yêu cầu không thành công. Nếu bạn có thể, hãy chạy một trình thám thính như Wireshark và gửi cho họ các gói nếu họ không tin rằng vấn đề là với phần mềm của họ.

Các vấn đề liên quan