Tôi có một ứng dụng C# và tôi đang truy cập một số dữ liệu qua REST vì vậy tôi chuyển vào một URL để lấy lại tải trọng JSON. Tôi truy cập một vài URL khác nhau theo lập trình và tất cả đều hoạt động tốt bằng cách sử dụng mã này bên dưới ngoại trừ một cuộc gọi.Tại sao ứng dụng C# của tôi thất bại trong yêu cầu REST này nhưng lại hoạt động tốt thông qua trình duyệt?
Đây là mã của tôi:
var url = "http://theRESTURL.com/rest/API/myRequest";
var results = GetHTTPClient().GetStringAsync(url).Result;
var restResponse = new RestSharp.RestResponse();
restResponse.Content = results;
var _deserializer = new JsonDeserializer();
nơi GetHTTPClient() được sử dụng mã này dưới đây:
private HttpClient GetHTTPClient()
{
var httpClient = new HttpClient(new HttpClientHandler()
{
Credentials = new System.Net.NetworkCredential("usr", "pwd"),
UseDefaultCredentials = false,
UseProxy = true,
Proxy = new WebProxy(new Uri("http://myproxy.com:8080")),
AllowAutoRedirect = false
});
httpClient.Timeout = new TimeSpan(0,0, 3500);
return httpClient;
}
nên như tôi đã nói, các mã trên hoạt động tốt nhưng một loạt các yêu cầu khác nhau nhưng đối với một yêu cầu cụ thể, tôi nhận được ngoại lệ bên trong số điện thoại
.GetStringAsync(url).Result
gọi với lỗi:
Không thể đọc dữ liệu từ kết nối giao thông: Kết nối hiện đã buộc phải đóng cửa bởi các máy chủ từ xa
tôi nhận được lỗi sau khi chờ đợi khoảng 10 phút. Điều thú vị là nếu tôi đặt cùng một URL không hoạt động trực tiếp vào Internet Explorer, tôi sẽ lấy lại tải trọng JSON (sau khoảng 10 phút). Vì vậy, tôi bối rối tại sao
- Nó sẽ hoạt động tốt trực tiếp từ trình duyệt nhưng không thành công khi sử dụng mã ở trên.
- Không thành công trong yêu cầu này nhưng các yêu cầu khác sử dụng cùng một mã hoạt động tốt theo chương trình.
Bất kỳ đề xuất nào về những điều cần thử hoặc những điều tôi nên yêu cầu chủ sở hữu máy chủ kiểm tra để giúp chẩn đoán điều gì đang xảy ra?
kiểm tra yêu cầu mà trình duyệt đang phát hành. –
Rất có thể là tiêu đề/thương lượng hoặc có thể là vấn đề thời gian chờ. Tôi thường sử dụng [fiddler] (http://www.telerik.com/fiddler) để thực hiện loại kiểm tra này. – rdoubleui
Cố gắng tránh sử dụng 'Task.Result', nó có thể kết thúc bằng một bế tắc có thể là thủ phạm ở đây, thay vào đó" chờ đợi "nhiệm vụ để có được kết quả của nó. –