2013-08-14 38 views
6

Tôi đang cố gắng đặt thời gian chờ thành đối tượng HttpClient trong Ứng dụng Windows Phone. Nhưng nếu yêu cầu không được hoàn thành trước khi hết thời gian chờ, GetAsync không bao giờ trả về giá trị.HttpClient treo khi hết thời gian chờ (Windows Phone)

Tôi đang sử dụng đoạn mã sau để có được câu trả lời:

HttpClientHandler handler = new HttpClientHandler(); 
HttpClient client = new HttpClient(handler); 
client.Timeout = TimeSpan.FromSeconds(5); 
client.BaseAddress = new Uri("http://www.foo.com"); 
HttpResponseMessage response = await client.GetAsync("/boo.mp3");//<--Hangs 
byte[] data = await response.Content.ReadAsByteArrayAsync(); 

Làm thế nào tôi có thể thiết lập đúng thời gian chờ để có được kết quả từ GetAsync?

+0

Bạn gọi phương pháp này chính xác như thế nào? Bạn không sử dụng 'Wait()' hay 'Result'? – svick

+1

Tôi gặp vấn đề tương tự. Trong trường hợp của tôi, tôi đã thử..catch() bao quanh tất cả mọi thứ trong công việc, trên nhiều cấp độ, và tất cả các bản ghi, ngay cả giữa mỗi bước. Tôi có phương thức trả lại Task, và sau đó tôi đăng nhập, sau đó tôi .Wait() trên đó. Tôi đang sử dụng thời gian chờ mặc định (mà tôi đoán là 100 giây?). Nếu cuộc gọi GetAsync() mất quá nhiều thời gian để dịch vụ web phản hồi, nó sẽ không bao giờ quay trở lại. Nó không đánh bất kỳ sản phẩm khai thác nào. Nó không chạm vào dòng tiếp theo (đó là một bản ghi). Nó cứ treo mãi mãi. – Thought

Trả lời

2

Không cần viết và viết mã để kiểm tra, dưới đây là một số thủ phạm có thể xảy ra.

1) Thời gian chờ 5 giây của bạn không đủ dài để tải xuống toàn bộ tệp "boo.mp3", do đó, thời gian chờ ngừng hoạt động.
2) Máy chủ web của bạn mất quá nhiều thời gian để phản hồi (không, nhưng có thể qua mạng di động)

Có thể tốt nhất là xóa giá trị hết thời gian chờ hoặc đặt giá trị thực tế hơn.

+1

Có, nó dừng hoạt động. Nhưng tôi không thể tìm thấy phương pháp để kiểm tra xem tác vụ có bị dừng bởi timeout hay không. –

8

Taken từ HttpClient documentation:

Giá trị mặc định là 100.000 mili giây (100 giây).

Truy vấn Hệ thống tên miền (DNS) có thể mất tới 15 giây để trả lại hoặc hết giờ. Nếu yêu cầu của bạn chứa tên máy chủ yêu cầu độ phân giải và bạn đặt Thời gian chờ thành giá trị nhỏ hơn 15 giây, có thể mất 15 giây trở lên trước khi thoát khỏi WebException để cho biết thời gian chờ là theo yêu cầu của bạn.

và dưới dạng ghi chú ZombieSheep 5 giây không đủ để truy vấn DNS hoàn tất.

Tôi cũng khuyên bạn nên xóa thời gian chờ và để giá trị mặc định, vì tôi biết cách duy nhất để "kiểm tra" nếu tác vụ không dừng là giả sử rằng bạn ping máy chủ và trả lời kết nối vẫn "OK" và làm việc/tải xuống tệp của bạn.

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