¿Cómo hacer un cliente de sondeo largo en C #?

Tengo una aplicación de escritorio C #, y consumo un servicio web sin problemas (wsdl añadido por “agregar referencias de servicio”, por lo que creo un objeto y llamo sus funciones).

Ahora, quiero usar técnicas de sondeo largo, pero no puedo imaginar cómo hacerlo desde la perspectiva del cliente.

¿Cómo configurar el timeout? ¿Debo usar un hilo dedicado a esto? ¿Hay algún ejemplo para una aplicación de escritorio C #? (no he encontrado ninguna)

Gracias damas

Debería poder configurar el tiempo de espera en el objeto de servicio web; los detalles dependerán de la clase exacta que esté utilizando, pero busque un ejemplo en WebClientProtocol.Timeout .

Ahora puede llamar a eso sincrónicamente desde un subproceso dedicado, o puede hacer una llamada asíncrona al servicio web para comenzar, especificando una callback para que se ejecute (probablemente en un subproceso del grupo de subprocesos) cuando el servicio responda. En ese caso, puede encontrar que puede especificar el tiempo de espera en la llamada asíncrona en sí misma. Una vez más, dependerá del tipo de clase de proxy de servicio web que tenga.

De esa manera, no necesita “desperdiciar” un hilo esperando la respuesta, pero puede encontrar que el modelo de progtwigción asíncrono es más difícil de entender que el síncrono. Si solo tienes una o dos de estas solicitudes a la vez, es poco probable que el par de hilos adicionales sea un problema. Si está esperando las respuestas de 500 servicios diferentes, ese es un asunto diferente y el modelo asíncrono definitivamente sería el camino a seguir.

Para temas de hilos, vea la respuesta de Jon.

Para el problema del tiempo de espera, aquí está la solución: en vs 2008, cuando agrego una “referencia de servicio” desde un wsdl, usará WCF de manera predeterminada, y no puedo encontrar la forma de establecer un valor de tiempo de espera.

Por lo tanto, al hacer clic con el botón derecho en Referencias de servicio, tengo que elegir “referencias web” (referencia avanzada / agregar web). De esa manera, utilizará solo servicios web “normales” y el parámetro Timeout está disponible.