Sto avendo un sacco di problemi nell'usare Webrequests in MonoDroid e ottenere timeout a caso. Il mio codice funziona bene, a volte tutte le richieste scadono e non funzionano.MonoDroid HttpWebRequest e WebClient non affidabili?
Ho verificato che i servizi Web utilizzati nelle richieste non rappresentano il problema.
Ecco un esempio di codice che posso usare per richiedere alcuni dati da un webservice utilizzando 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;
}
Come si può vedere, è roba di base. Uso il codice come sopra sempre su un altro thread per l'interfaccia utente utilizzando ThreadPool.QueueUserWorkItem o TaskFactory.
Quello che ho notato è che se le richieste iniziano a scadere dalla mia app e la collego al mio computer, allora eseguo il debug dell'applicazione da MonoDevelop, le richieste funzionano senza scadenze. Non sono sicuro se questo significhi qualcosa. Questo è simile a testare i servizi Web dal mio computer utilizzando un browser sulla stessa rete del telefono. I servizi web funzionano sempre senza problemi.
Qual è il modo migliore per eseguire Webrequest da MonoDroid?
Come posso garantire che le mie richieste abbiano sempre esito positivo e non scadano se il servizio Web funziona correttamente?
Stai per caso licenziando molte richieste contemporaneamente? Ho avuto problemi in passato con varie piattaforme che non accettavano gentilmente richieste multiple simultanee, anche se non ho avuto il piacere di battere MonoDroid nello stesso modo. –
Ciao Chris, Sì, potrebbe essere il caso. Sto usando questo codice su thread separati. Pensi che dovrei usare il blocco della sincronizzazione ovunque io sia in una richiesta web? – startupsmith
Se questo è il caso, quindi fare un tentativo in modo da eseguire solo 1 richiesta in una sola volta. Ho anche riscontrato un problema in cui era il numero massimo di richieste (e la dimensione massima cumulativa dei byte) per frame principale dell'interfaccia utente che ha causato un problema (a causa del browser, credo). Quindi forse puoi provare a mettere le richieste in coda e chiamarle lentamente e vedere se funziona. –