2012-06-20 31 views
6

Tôi gặp rất nhiều sự cố khi sử dụng các yêu cầu Web trong MonoDroid và nhận thời gian chờ một cách ngẫu nhiên. Mã của tôi hoạt động tốt sau đó đôi khi tất cả các yêu cầu chỉ hết thời gian chờ và không hoạt động.MonoDroid HttpWebRequest và WebClient không đáng tin cậy?

Tôi đã xác minh các dịch vụ web được sử dụng trong các yêu cầu của mình không phải là vấn đề.

Dưới đây là một ví dụ về một số mã mà tôi có thể sử dụng để yêu cầu một số dữ liệu từ một webservice bằng MonoDroid:

bool bolOk = false; 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create ("http://www.website.com/service/"); 
request.Timeout = 20000; 
request.Credentials = gv_objCredentials; 

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { 
    bolOk = response.StatusCode == HttpStatusCode.OK; 
} 

Như bạn có thể nhìn thấy nó là nội dung cơ bản. Tôi sử dụng mã như trên luôn luôn trên một thread để giao diện người dùng bằng cách sử dụng ThreadPool.QueueUserWorkItem hoặc TaskFactory.

Điều tôi nhận thấy là nếu các yêu cầu bắt đầu tính thời gian từ ứng dụng của tôi và tôi cắm nó vào máy tính của mình, sau đó gỡ lỗi ứng dụng từ MonoDevelop các yêu cầu hoạt động mà không cần hết thời gian. Tôi không chắc chắn nếu điều này có nghĩa là bất cứ điều gì. Điều này tương tự như kiểm tra các dịch vụ web từ máy tính của tôi bằng trình duyệt trên cùng một mạng với điện thoại. Các dịch vụ web luôn hoạt động mà không có bất kỳ vấn đề nào.

Cách tốt nhất để thực hiện yêu cầu web từ MonoDroid là gì?

Làm cách nào để đảm bảo các yêu cầu của tôi luôn thành công và sẽ không hết thời gian nếu webservice hoạt động chính xác?

+1

Bạn có cơ hội bắn nhiều yêu cầu cùng lúc không? Tôi đã có vấn đề trong quá khứ với các nền tảng khác nhau không vui lòng với nhiều yêu cầu đồng thời, mặc dù tôi đã không có niềm vui của búa MonoDroid trong cùng một thời trang. –

+0

Xin chào Chris, Có thể điều này có thể xảy ra. Tôi đang sử dụng mã này trên các chủ đề riêng biệt. Bạn có nghĩ rằng tôi nên sử dụng khóa đồng bộ ở bất cứ đâu tôi truy cập web không? – startupsmith

+1

Nếu đó là trường hợp, sau đó cung cấp cho nó một shot để bạn chỉ thực hiện 1 yêu cầu cùng một lúc. Tôi cũng đã có một vấn đề mà nó là một số lượng tối đa của yêu cầu (và kích thước byte tích lũy tối đa) cho mỗi khung giao diện người dùng chính gây ra một vấn đề (do trình duyệt tôi nghĩ). Vì vậy, có lẽ bạn có thể thử đặt các yêu cầu trong một hàng đợi và gọi chúng chậm và xem nó có hoạt động hay không. –

Trả lời

1

Có phiên bản mới của Mono dành cho Android (4.2.5) sửa một số lỗi với WebRequest và webRequestStream. Bạn có thể kiểm tra ghi chú phát hành tại đây: http://docs.xamarin.com/android/Releases/Mono_For_Android_4/Mono_for_Android_4.2.5

Tôi khuyên bạn nên tải xuống các bit mới nhất và kiểm tra xem nó có hoạt động không. Nếu không, xin vui lòng gửi một lỗi và họ chắc chắn sẽ sửa chữa nó trong phiên bản tiếp theo của sản phẩm.

2

Tôi gặp sự cố về Xamarin 4.2.6 và 4.2.8.

Nhờ hỗ trợ Xamarin, họ đã xác định vấn đề và đề nghị tôi nhắm mục tiêu xây dựng của tôi để armeabi-v7a hơn armeabi trong thuộc dự án của tôi (một số vấn đề xử lý đa lõi mô tả here)

Tùy thuộc vào việc bạn có kế hoạch để hỗ trợ bộ vi xử lý đa lõi hay không, bạn nên kiểm tra this post và có thể cần phải chỉnh sửa tệp .csproj theo cách thủ công.

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