2014-10-11 14 views
7

Tôi có thể đặt thời gian chờ của đối tượng HttpClient trực tiếp với HttpClient.Timeout nhưng gần đây tôi đã đọc về lớp WebRequestHandler là một dẫn xuất của HttpClientHandler.Whats sự khác biệt giữa HttpClient.Timeout và sử dụng các thuộc tính timeout WebRequestHandler?

WebRequestHandler có thuộc tính ReadWriteTimeout. Điều này sẽ ảnh hưởng đến hoạt động của yêu cầu khi được sử dụng cùng với HttpClient.Timeout như thế nào?

Trả lời

16

Khi bạn thực hiện một SendAsync các HttpClient.Timeout được đặt trên CancellationTokenSource. Điều này có nghĩa là thời gian chờ này là cho toàn bộ hoạt động không đồng bộ.

Mặt khác, WebRequestHandler.ReadWriteTimeout được sao chép vào HttpWebRequest nơi được đặt trên luồng yêu cầu cả ReadTimeoutWriteTimeout. Vì vậy, đây là một thời gian chờ ở cấp độ dòng, mà cuối cùng là một thời gian chờ mức socket.

Nếu bạn đặt cả hai, thì nếu hoạt động mất hơn HttpClient.Timeout thì tổng thời gian sẽ hết thời gian chờ và nếu đọc hoặc ghi từ luồng dài hơn WebRequestHandler.ReadWriteTimeout thì cũng sẽ hết thời gian chờ. Mặc dù tôi không chắc chắn nếu có một sự khác biệt trong các trường hợp ngoại lệ thời gian chờ lớn lên.

+0

Vì nó liên quan đến luồng, 'ReadWriteTimeout 'ảnh hưởng' Response.Content.ReadAsStringAsync' sau đó? Tại thời điểm này, tôi sử dụng 'HttpCompletionOption.ResponseContentRead' khi gọi' SendAsync' để đảm bảo nội dung được đọc trước thời gian chờ, vì 'ReadAsStringAsync' không cho phép thời gian chờ hoặc hủy bỏ rõ ràng. Thay vào đó, tôi muốn sử dụng 'HttpCompletionOption.ResponseHeadersRead', nếu' WebRequestHandler' cho phép tôi đặt thời gian chờ để đọc luồng nội dung. – iguanaman

+0

Hơi khó để xem xét trường hợp sử dụng của bạn từ mô tả, bạn có thể đăng mã có liên quan bằng cách chỉnh sửa câu hỏi không? – weston

-1

System.Net.HttpClient có thể thiết lập thuộc tính thời gian chờ như trên

var client = new HttpClient(); 
client.Timeout.Add(new TimeSpan(1,0,0)); 
+0

OP hỏi 'khác biệt' giữa hai điều, không phải là, cách sử dụng. –

+0

Xin lỗi, tôi đã hiểu sai yêu cầu của bạn ... –

+0

Xin lỗi, tôi đã hiểu sai yêu cầu của bạn ... Hai là gần như giống nhau, nhưng WebRequestHandler có thể đặt các tham số khác, HttpClient.Timeout nhanh hơn một chút so với WebRequestHandler –

1

WebRequestHandler.ReadWriteTimeout - Gets hoặc thiết lập một thời gian chờ trong mili giây khi viết một yêu cầu hay đọc một câu trả lời từ một máy chủ.

HttpClient.Timeout - Nhận hoặc đặt số TimeSpan để chờ trước khi yêu cầu hết giờ.

Ở đây, WebRequestHandler là một wrapper trên HTTPClient WebRequestHandler xuất phát từ HttpClientHandler nhưng thêm tính năng mà thường chỉ có sẵn trên toàn NET. Để kết luận, nó là nhiều hơn về điều tương tự.

Để biết thêm thông tham khảo liên kết này - http://blogs.msdn.com/b/henrikn/archive/2012/08/07/httpclient-httpclienthandler-and-httpwebrequesthandler.aspx

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