Estoy teniendo problemas para usar WeRequests en MonoDroid y obtener tiempos de espera al azar. Mi código funciona bien, a veces, todas las solicitudes simplemente exceden el tiempo de espera y no funcionan.MonoDroid HttpWebRequest y WebClient no fiables?
He verificado que los servicios web utilizados en mis solicitudes no son el problema.
Aquí es un ejemplo de un código que pueda utilizar para solicitar algunos datos de un servicio web utilizando 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;
}
Como se puede ver que es lo básico. Utilizo el código como el anterior siempre en otro subproceso para la UI usando ThreadPool.QueueUserWorkItem o TaskFactory.
Lo que he notado es que si las solicitudes comienzan a agotar el tiempo de espera de mi aplicación y la conecto a mi computadora, entonces la aplicación de depuración de MonoDevelop funciona sin agotar el tiempo de espera. No estoy seguro si esto significa algo. Esto es similar a probar los servicios web desde mi computadora usando un navegador en la misma red que el teléfono. Los servicios web siempre funcionan sin problemas.
¿Cuál es la mejor manera de hacer Webrequests desde MonoDroid?
¿Cómo puedo garantizar que mis solicitudes sean siempre exitosas y que no se agotarán si el servicio web funciona correctamente?
¿Estás disparando muchas solicitudes al mismo tiempo? He tenido problemas en el pasado con varias plataformas que no han tenido en cuenta las solicitudes simultáneas múltiples, aunque no he tenido el placer de martillar MonoDroid de la misma manera. –
Hola Chris, sí, este podría ser el caso. Estoy usando este código en hilos separados. ¿Crees que debería usar el bloqueo de sincronización donde sea que vaya a una webrequest? – startupsmith
Si ese es el caso, entonces pruébalo para que solo realices 1 solicitud a la vez. También he tenido un problema en el que fue una cantidad máxima de solicitudes (y el tamaño de bytes acumulativo máximo) por marco de UI principal que causó un problema (debido al navegador, creo). Entonces, quizás puedas intentar colocar las solicitudes en una cola y llamarlas lentamente para ver si eso funciona. –