2009-04-14 4 views
9

Làm cách nào để giữ kết nối trong C#? Tôi không làm đúng. Tôi có nghĩ rằng để tạo ra một HttpWebRequest obj và sử dụng nó để đi đến bất kỳ URL tôi cần? tôi không thấy một cách để truy cập vào một url khác sau đó HttpWebRequest.Create phương pháp tĩnh.Giữ kết nối http còn trong C#?

Làm cách nào để tạo kết nối, duy trì kết nối, duyệt nhiều trang/phương tiện trên trang và hỗ trợ proxys? (Tôi nghe proxy rất dễ dàng và hỗ trợ gần như là tiêu chuẩn?) -edit- câu trả lời hay. Làm cách nào để yêu cầu url thứ 2?

{ 
HttpWebRequest WebRequestObject = (HttpWebRequest)HttpWebRequest.Create("http://google.com"); 
WebRequestObject.KeepAlive = true; 
//do stuff 
WebRequestObject.Something("http://www.google.com/intl/en_ALL/images/logo.gif"); 
} 

Trả lời

19

Bạn đã thử các HttpWebRequest.KeepAlive bất động sản? Nó đặt tiêu đề HTTP Keep-Alive thích hợp và không tồn tại các kết nối. (Tất nhiên điều này cũng phải được hỗ trợ và kích hoạt bởi máy chủ web từ xa).

Tài liệu HttpWebRequest.KeepAlive trên MSDN nói rằng nó được đặt thành đúng theo mặc định cho kết nối HTTP1.1, vì vậy tôi nghi ngờ máy chủ bạn đang cố gắng liên hệ không cho phép kết nối.

Proxy được sử dụng tự động và cài đặt của nó được lấy từ cài đặt hệ thống của bạn (đọc Internet Explorer). Cũng có thể ghi đè cài đặt proxy qua thuộc tính HttpWebRequest.Proxy hoặc bằng cách tinh chỉnh tệp cấu hình ứng dụng (xem http://msdn.microsoft.com/en-us/library/kd3cf2ex.aspx).

8

Đặt HttpWebRequest.KeepAlive thuộc tính True .NET sẽ xử lý phần còn lại. Nó chỉ là hồ bơi kết nối cơ sở dữ liệu. Hoạt động minh bạch.

Bạn có thể tạo kết nối mới một cách tự do .NET sẽ tìm ra rằng bạn đang kết nối với một máy chủ đã kết nối và sẽ sử dụng nó. Cũng phụ thuộc vào số Net.ServicePointManager.DefaultConnectionLimit của bạn, nó sẽ thiết lập các kết nối mới (nếu bạn thực hiện đa luồng).

+0

tôi không tìm thấy điều này là hoàn toàn chính xác. .NET cần trợ giúp trong việc quản lý các kết nối bằng cách sử dụng lại một cá thể HttpClient. Tôi đang làm việc thông qua một vấn đề bây giờ, nơi có hàng ngàn thành lập các kết nối không sử dụng, bởi vì giữ-sống được sử dụng với một thời gian chờ kết nối -1 thuê và một thể hiện mới của HttpClient được sử dụng theo yêu cầu. Điều này có thể chỉ là một vấn đề với lớp HttpClient mới hơn. –

1

Tôi gặp sự cố tương tự khi HttpWebRequest.KeepAlive = true không đủ để giữ cho nó luôn hoạt động. Kết nối chỉ được bật sau khi tôi đặt yêu cầu.UnsafeAuthenticatedConnectionSharing = true và ServicePointManager.MaxServicePointIdleTime = 100000; // tránh 0 hoặc giá trị thấp

0

Nếu bạn đang sử dụng Http 1.1, bạn không nên sử dụng Keep-Alive làm kết nối hoàn toàn là Keep-Alive.

Thuộc tính HttpWebRequest.KeepAlive có thể được đặt nhưng nếu bạn đang gửi yêu cầu Http 1.1, nó sẽ không thực sự đặt tiêu đề trừ khi bạn đặt nó thành Đóng.

Dưới đây là một câu hỏi mà có biết thêm: is an HTTP/1.1 request implicitly keep-alive by default?