Tôi cần phát hành khoảng 50 yêu cầu HTTP cho một máy chủ (cuộc gọi API). Hiệu suất là quan trọng, vì vậy tôi muốn sử dụng HTTP KeepAlive's. WebClient có hỗ trợ điều này không?WebClient có sử dụng KeepAlive không?
Trả lời
Máy in trên máy của tôi, nhưng tôi không thể thấy rằng đó là được ghi thành tài liệu. Tôi chắc chắn sẽ mong đợi nó theo mặc định. Cách đơn giản nhất để nói là chạy Wireshark (hoặc Fiddler) và xem chính xác những gì đang đi xuống dây.
Ví dụ, chương trình này:
using System;
using System.Net;
class Test
{
static void Main()
{
WebClient client = new WebClient();
for (int i = 0; i < 50; i++)
{
string text = client.DownloadString("http://www.microsoft.com");
Console.WriteLine(text.Length);
}
}
}
Tạo một yêu cầu đầu tiên của:
GET/HTTP/1.1
Host: www.microsoft.com
Connection: Keep-Alive
yêu cầu dãy chỉ:
GET/HTTP/1.1
Host: www.microsoft.com
... có lẽ bởi vì một khi kết nối một đang ở chế độ KeepAlive, nó giả định nó sẽ vẫn như vậy.
Như được nêu ở đây, WebClient sử dụng WebRequest trong việc triển khai riêng tư, http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx. Microsoft không cho rằng đó là tài sản công cộng để bạn kiểm soát.
Do đó, hãy xem xét việc triển khai bằng cách sử dụng Trình phản xạ, bạn có thể xem cách KeepAlive được đặt cho đối tượng WebRequest đang sử dụng. Giống như @Jon đã chỉ ra, một thử nghiệm cho thấy rằng KeepAlive được đặt thành true. Điều này cũng phù hợp với các kịch bản khác, chẳng hạn như thực hiện riêng tư từ xa .NET.
Trong trường hợp hiếm hoi, bạn có thể tìm thấy KeepAlive = true có thể dẫn đến SocketException, và sau đó bạn phải sử dụng sự phản chiếu hoặc các thủ thuật khác để đặt sai thành rất khó chịu.
Bạn không cần phải sử dụng sự phản chiếu, bạn chỉ có thể kế thừa, ghi đè GetWebRequest() và đặt một số thuộc tính trên WebRequest sau khi gọi base.GetWebRequest() theo phương thức được ghi đè –
Vâng, đó là cách tốt hơn. –
https://msdn.microsoft.com/en-us/library/system.net.webclient.getwebrequest.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2 – Ginkgo
- 1. uWSGI keepalive
- 2. sử dụng đúng cách KeepAlive trong Apache .htaccess
- 3. Sử dụng WebClient cho JSON serialization?
- 4. WCF wsHttpBinding với http keepalive
- 5. nên WebClient trường hợp được tái sử dụng trong Silverlight
- 6. C# sử dụng WebClient tải chunked nội dung mã hóa
- 7. WebClient Không tự động chuyển hướng
- 8. C# WebClient với https
- 9. Sử dụng WebClient trong C# có cách nào để lấy URL của trang web sau khi được chuyển hướng không?
- 10. Giải pháp keepalive Android http, nhưng nó có phải là giải pháp vĩnh viễn không?
- 11. webclient và expect100continue
- 12. WebClient + HTTPS Issues
- 13. Có thể sử dụng proxy HTTPS trong HTMLunit không?
- 14. Cách gửi tiêu đề KeepAlive đúng cách trong C#?
- 15. WebClient rất chậm
- 16. thêm cookie WebClient
- 17. WebClient đặt tiêu đề
- 18. Tải lên JSON qua WebClient
- 19. Lớp WebClient không tồn tại trong Windows 8
- 20. .NET: Tôi có cần giữ tham chiếu đến WebClient khi tải xuống không đồng bộ không?
- 21. MonoDroid HttpWebRequest và WebClient không đáng tin cậy?
- 22. Tải tệp lên máy chủ tệp bằng cách sử dụng lớp webclient
- 23. 'Một ngoại lệ xảy ra trong một yêu cầu WebClient" khi sử dụng C# ASP.NET
- 24. Cách chỉ định tham số biểu mẫu khi sử dụng webclient để tải lên tệp
- 25. Khi nào thích hợp để sử dụng WCF trên webclient hoặc httpwebrequest?
- 26. Tên từ xa không thể được giải quyết - WebClient
- 27. Tôi có cần sử dụng ProxyPassReverse nếu tôi đang sử dụng viết lại mod không?
- 28. C# máy chủ webclient và proxy
- 29. Cách lấy mã trạng thái từ webclient?
- 30. POST'ing mảng trong WebClient (C# /. Net)
Tôi đã nhận thấy một số hành vi kỳ lạ khi sử dụng UploadData, vì một số lý do mà tiêu đề của khách hàng được đặt lại khi trả về byte. – Oliver
@Oliver: Nó không thực sự rõ ràng những gì bạn có nghĩa là do đó, nhưng nếu đó là một cái gì đó gây ra cho bạn vấn đề, bạn có thể muốn hỏi một câu hỏi mới. –
Nó không thực sự là một vấn đề chỉ nghĩ rằng tôi muốn đặt một lưu ý về một số hành vi tôi đã nhìn thấy. Hành vi như sau Tạo WebClient -> Thêm Tiêu đề vào Từ điển -> Thực hiện cuộc gọi UploadData -> Tiêu đề sẽ trống, có vẻ như chúng bị nuked vì một lý do nào đó. – Oliver