Chúng tôi đang sử dụng các đối tượng HTTPWebRequest
để thực hiện yêu cầu HTTP cho ứng dụng của chúng tôi và chúng tôi đang gặp sự cố khi yêu cầu xác thực và có proxy trong suốt (Mực 3.1.10).HTTPWebRequest.GetResponse() thất bại với các yêu cầu được xác thực thông qua proxy trong suốt
string url = "http://www.icode.co.uk/test/auth.php";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = new NetworkCredential("username", "password");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
MessageBox.Show(reader.ReadToEnd());
reader.Close();
stream.Close();
response.Close();
Mã ban đầu của chúng tôi đã sử dụng lớp WebClient có cùng vấn đề.
Lần đầu tiên mã này chạy, nó sẽ hiển thị kết quả chính xác. Khi mã chạy một lần thứ hai, nó không thành công trên dòng GetResponse()
với:
System.Net.WebException was unhandled
Message="The server committed a protocol violation. Section=ResponseStatusLine"
Source="System"
StackTrace:
at System.Net.HttpWebRequest.GetResponse()
at Dummy.DummyForm.button1_Click(Object sender, EventArgs e) in H:\Trial\Dummy\DummyForm.cs:line 42
at ...
Trên Windows 7, khởi động lại quá trình này gây ra nó để phục hồi và làm việc một lần, nhưng Server 2003 đòi hỏi phải khởi động lại đầy đủ.
Nhìn vào network capture, hai yêu cầu giống hệt nhau để bắt đầu, yêu cầu chưa được xác thực ban đầu được gửi và máy chủ trả lời, nhưng yêu cầu không gửi yêu cầu được xác thực thứ 2 ở giữa câu trả lời ban đầu như thể bỏ qua Content-Length
tiêu đề (chính xác). Sau đó nó nhận được phần còn lại của câu trả lời ban đầu và không thành công với lỗi giao thức.
Nó có vẻ kỳ quặc mà khách hàng (HTTPWebRequest
) không đóng kết nối sạch mặc dù.
Khi proxy không được sử dụng (không phải cổng 80 hoặc lưu lượng nội bộ), các yêu cầu đều hoạt động như mong đợi. Khi không có xác thực, nó cũng hoạt động vì nó chỉ làm cho yêu cầu duy nhất.
Tôi đã giảm mã vấn đề xuống mức tối thiểu và sao chép nó bằng mẫu MSDN, nhưng có ai biết nếu đây là sự cố đã biết hoặc sự cố trong cấu hình (.NET hoặc Mực) của chúng tôi không?
Không chắc chắn đây có phải là vấn đề nằm ở đâu không, nhưng bạn có chắc chắn đóng Trình quản lý luồng của mình khi bạn đã hoàn tất không? –
Cảm ơn bạn đã thêm ảnh chụp màn hình. Bạn có bỏ thông tin Ủy quyền ra khỏi GET đầu tiên trong đó hay không, nó đã không bao gồm bất kỳ thông tin nào? –
Tôi đã xóa câu trả lời của mình, vì rõ ràng là nó không áp dụng. –