2012-06-20 18 views
6

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?

+1

¿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. –

+0

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

+1

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. –

Respuesta

1

Hay una nueva versión de Mono para Android (4.2.5) que soluciona varios errores con WebRequest y webRequestStream. Puede consultar las notas de la versión aquí: http://docs.xamarin.com/android/Releases/Mono_For_Android_4/Mono_for_Android_4.2.5

Sugiero descargar los últimos bits y verificar si funciona. De lo contrario, presente un error y seguramente lo arreglarán en la próxima versión del producto.

2

Tuve el problema en Xamarin 4.2.6 y 4.2.8.

Gracias al apoyo Xamarin, identificaron el problema y sugirió He orientado mi construcción de armeabi-V7A en lugar de armeabi en mis propiedades del proyecto (una cierta edición procesador multi-núcleo descrito here)

Dependiendo de si se planean soporte procesadores multi-core o no, debe consultar nuestro this post y puede necesitar editar manualmente su archivo .csproj.

Cuestiones relacionadas