2012-06-20 23 views
6

Mam dużo problemów z korzystaniem z Webrequests w MonoDroid i uzyskiwaniem limitu czasu na chybił trafił. Mój kod działa poprawnie, a czasami wszystkie żądania są ograniczone i nie działają.MonoDroid HttpWebRequest i WebClient niewiarygodne?

Sprawdziłem, czy serwisy internetowe użyte w moich żądaniach nie są problemem.

Oto przykład jakiegoś kodu, który można używać do żądania niektórych danych z usługa przy użyciu 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; 
} 

Jak widać jest to podstawowe rzeczy. Używam kodu jak wyżej zawsze w innym wątku do interfejsu użytkownika przy użyciu ThreadPool.QueueUserWorkItem lub TaskFactory.

Zauważyłem, że jeśli żądania zaczną się kończyć z mojej aplikacji i podłączam ją do mojego komputera, a następnie debuguję aplikację z MonoDevelop, żądania działają bez limitu czasu. Nie jestem pewien, czy to coś znaczy. Jest to podobne do testowania usług internetowych z mojego komputera przy użyciu przeglądarki w tej samej sieci co telefon. Serwisy internetowe zawsze działają bez żadnych problemów.

Jaki jest najlepszy sposób tworzenia Webrequests z MonoDroid?

Jak mogę zapewnić, że moje żądania zawsze będą skuteczne i czy nie przekroczą limitu czasu, jeśli usługa działa prawidłowo

+1

Czy przez przypadek odpalasz wiele żądań jednocześnie? W przeszłości miałem problemy z różnymi platformami, które nie traktowały mnie uprzejmie w stosunku do wielu jednoczesnych próśb, chociaż nie miałem przyjemności wbijać MonoDroid w ten sam sposób. –

+0

Cześć Chris, tak to może być. Używam tego kodu w osobnych wątkach. Czy uważasz, że powinienem używać blokady synchronizacji w dowolnym miejscu na stronie z zapytaniem? – startupsmith

+1

W takim przypadku należy zrobić zdjęcie, aby wykonać jedno żądanie naraz. Wystąpił również problem polegający na tym, że była to maksymalna liczba żądań (i maksymalna łączna wielkość bajtów) na główną ramkę interfejsu, która spowodowała problem (z powodu przeglądarki, którą myślę). Być może więc możesz spróbować umieścić żądania w kolejce i wywoływać je powoli i sprawdzić, czy to działa. –

Odpowiedz

2

Miałem problem w Xamarin 4.2.6 i 4.2.8.

Dzięki wsparciu Xamarin one zidentyfikować problem i zaproponował mi ukierunkowane mój build do armeabi-v7a zamiast armeabi w moich właściwości projektu (niektóre wielordzeniowy procesor problem opisany here)

zależności od tego czy planujesz obsługiwać procesory wielordzeniowe lub nie, należy sprawdzić nasze this post i może być konieczne ręczne edytowanie pliku .csproj.