2012-06-20 16 views
6

私はMonoDroidでWebrequestsを使用してランダムにタイムアウトを取得するのに多くの問題を抱えています。私のコードは正常に動作し、時にはすべての要求がタイムアウトして動作しないことがあります。MonoDroid HttpWebRequestとWebClientは信頼性がありませんか?

私の要求で使用されているウェブサービスが問題ではないことを確認しました。あなたはそれが基本的なものである見ることができるように

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; 
} 

:ここ

は私がMonoDroidを使用してWebサービスからのいくつかのデータを要求するために使用することができますいくつかのコードの例です。 ThreadPool.QueueUserWorkItemまたはTaskFactoryを使用して、UIの別のスレッドで上記のようなコードを常に使用します。

私の気づいたことは、要求が自分のアプリケーションからタイムアウトしてからコンピュータに接続し、MonoDevelopからアプリケーションをデバッグすると、要求がタイムアウトせずに機能することです。これが何かを意味するかどうかはわかりません。これは、電話機と同じネットワーク上のブラウザを使用して、自分のコンピュータからWebサービスをテストする場合と似ています。 Webサービスは常に問題なく動作します。

MonoDroidからWebrequestsを作成する最良の方法は何ですか?

ウェブサービスが正しく動作している場合、リクエストが常に成功し、タイムアウトにならないようにするにはどうすればよいですか?

+1

多くのリクエストを同時に発砲していますか?私は過去に、さまざまなプラットフォームで複数の同時リクエストに親切に対応していないという問題を抱えていましたが、同じ方法でMonoDroidを叩く喜びはありませんでした。 –

+0

こんにちはクリス、はいこれが当てはまる可能性があります。私は別のスレッドでこのコードを使用しています。あなたはどこでも私はWeb要求に同期ロックを使用する必要があると思いますか? – startupsmith

+1

その場合は、一度に1つのリクエストしか実行しないようにショットしてください。また、問題を引き起こしたメインUIフレームあたりの最大リクエスト数(および最大の累積バイトサイズ)が問題であった(これは私が考えるブラウザのため)。だから、おそらくキューに要求を入れて、それらをゆっくりと呼び出そうとし、それが動作するかどうかを調べることができます。 –

答えて

1

Android用の新しいバージョン(4.2.5)があり、WebRequestとwebRequestStreamにいくつかのバグが修正されています。ここでリリースノートを確認できます:http://docs.xamarin.com/android/Releases/Mono_For_Android_4/Mono_for_Android_4.2.5

最新のビットをダウンロードして動作することをお勧めします。そうでない場合は、バグを報告してください。次のバージョンの製品で修正されるはずです。

2

私はXamarin 4.2.6と4.2.8で問題が発生しました。 Xamarinサポートへ

おかげで、彼らはあなたがすることを計画かどうかに応じて

(一部のマルチコアプロセッサの問題がhereを説明した)問題を特定し、私ではなく私のプロジェクトのプロパティでarmeabi-v7aをarmeabiために私のビルドをターゲットに提案しましたマルチコアプロセッサをサポートしているかどうかは、this postを確認し、.csprojファイルを手動で編集する必要があります。

関連する問題