Lý do là giới hạn số lượng kết nối http bị bỏ qua khi sử dụng Fiddler.
Tôi gặp phải hành vi tương tự khi sử dụng System.Net.Http.HttpClient
để thực hiện nhiều yêu cầu đồng thời (~ 80). Với Fiddler đang chạy, tất cả các yêu cầu đã hoàn thành nhanh hơn nhiều. Keep-alive chắc chắn đã được kích hoạt.
Tôi đã sử dụng Wireshark để xem điều gì đang xảy ra và điều đầu tiên tôi nhận thấy rằng cách thức lưu lượng truy cập http khác nhau. Với các yêu cầu Fiddler đã được ném tất cả cùng một lúc và sau đó phản ứng theo sau độc đáo nhóm là tốt. Nếu không có Fiddler, các yêu cầu được xen kẽ với các phản hồi.
Thứ hai, tcpview cho thấy mã của tôi không có Fiddler chỉ tạo 2 kết nối tcp với máy chủ. Với Fiddler bắt đầu, số lượng kết nối tăng mạnh. Đã có hàng chục người trong số họ từ ứng dụng của tôi đến Fiddler và sau đó từ Fiddler đến máy chủ.
Người ta biết rằng tiêu chuẩn http đề xuất số lượng kết nối http không được nhiều hơn 2 và có vẻ như giới hạn được triển khai dưới dạng cài đặt mặc định trong các ứng dụng khách http.
Trong các ứng dụng .NET, chúng tôi có thể kiểm soát giới hạn với thuộc tính tĩnh ServicePointManager.DefaultConnectionLimit
. Là một thử nghiệm, việc đặt nó thành 100 làm cho các yêu cầu thực thi cùng một tốc độ có hoặc không có Fiddler.
Các thiết lập cũng có thể được kiểm soát thông qua app.config:
<system.net>
<connectionManagement>
<add address="*" maxconnection="100" />
</connectionManagement>
</system.net>
Bây giờ, tại sao giới hạn kết nối mặc định không được tôn trọng khi sử dụng Fiddler? Hóa ra giới hạn là khác nhau khi một máy khách http sử dụng một proxy và Fiddler hoạt động như một proxy. Tôi không tìm thấy nhiều thông tin về giới hạn kết nối proxy bên cạnh this old article.
Nguồn
2014-05-21 17:16:06
Trong chương trình khi tạo kết nối và tải xuống nội dung, tôi sẽ đóng phản hồi và hủy yêu cầu trong lần cuối, nhưng tôi tự hỏi rằng đây cũng là mã đang chạy với fiddler ở chế độ nền và Nhanh. sao Fiddler có thay đổi yêu cầu của tôi và sử dụng cùng một kết nối cho mỗi yêu cầu không? – Ehsan
@Eshan _ "Fiddler có thay đổi yêu cầu của tôi và sử dụng cùng một kết nối cho mỗi yêu cầu không?" _ Có. – CodeCaster
vì vậy làm thế nào tôi có thể sử dụng tính năng này trong chương trình của tôi với HttpWebRequest? – Ehsan