2015-12-31 10 views
6

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?

+0

kiểm tra yêu cầu mà trình duyệt đang phát hành. –

+0

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

+1

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ó. –

Trả lời

1

Tôi nghĩ thời gian chờ không phải là vấn đề ở đây, vì lỗi cho biết kết nối đã bị đóng từ xa và thời gian chờ đã đặt là khoảng 58 phút, quá đủ so với các số liệu khác của bạn.

Bạn đã thử xem xét các yêu cầu chưa? Có thể muốn chỉnh sửa câu hỏi của bạn với những kết quả đó.

+0

Tôi đồng ý rằng thời gian chờ của tôi cao hơn nhiều so với việc tôi gặp phải lỗi này. Bạn có thể làm rõ câu hỏi của bạn "nhìn vào các yêu cầu chính nó?". Bạn gợi ý gì? – leora

+0

Sử dụng trình kích hoạt để xem chính xác các tiêu đề yêu cầu của bạn trông như thế nào, chỉ cần so sánh các tiêu đề của trình duyệt và yêu cầu ứng dụng. Ngoài ra, như được đề xuất, hãy kiểm tra proxy có liên quan. – rdoubleui

+0

Hóa ra là có một proxy khác được sử dụng trong cuộc gọi REST của tôi so với trình duyệt. Một khi tôi đã sửa chữa nó hoạt động như mong đợi – leora

0

Nếu bạn xóa dòng httpClient.Timeout = new TimeSpan(0,0, 3500); vấn đề cần được giải quyết nhưng nếu yêu cầu kéo dài 20 phút, bạn nên đợi mọi lúc.

+0

Tôi không hiểu điều này vì khoảng thời gian chờ của tôi lớn hơn 20 phút? – leora

+0

Xin lỗi! Tôi đã đọc 350. 350 giây là 5 phút vì nó được viết trong câu hỏi của bạn. Lỗi của tôi. 20 phút là một ví dụ.Tuy nhiên, bạn đã cố gắng loại bỏ dòng đó chưa? – erikscandola

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