Tengo una aplicación WPF en la que estoy trabajando actualmente para separarme del lado del cliente y del servidor: uso de WCF. No me gustó el lío que inicialmente recibí con la solución directa, así que ahora estoy reestructurando siguiendo las recomendaciones en el screencast de Miguel Castro, WCF Extreme. Si no está familiarizado con el video, básicamente configura toda la comunicación de forma manual, sin utilizar referencias de servicio. Esto incluye:Implementación de un servicio WCF asíncrono
- un contrato común con todos los contratos de servicios y de datos - referenciado por el cliente y el servidor
- Una aplicación de consola que aloja el servicio
- clases de Proxy en la asignación de cliente hasta el servicio, y las llamadas que pasan (usando ClientBase o ClientFactory)
He seguido todos sus pasos, y realmente me gusta a dónde va esto. Sin embargo, no atiende llamadas de servicio asíncronas, y esto es lo que me gustaría usar.
Al agregar una referencia de servicio, puedo marcar la casilla "Generar operaciones asíncronas" y obtengo MyServiceCompleted y MyServiceAsync. Sin embargo, supongo que esto es algo que se generó al agregar la referencia del servicio, y no algo de magia en las clases en las que se basa.
Entonces, ¿puedo obtener operaciones asincrónicas de ClientBase o ClientFactory de alguna manera? ¿O tengo que definir los servicios del lado del servidor real para ser asíncrono? Si es así, ¿podría alguien darme algunos consejos o ejemplos sobre cómo comenzar con un servicio asincrónico simple? He estado leyendo en MSDN sobre el tema, pero me ha dejado confundido, sintiéndome como un idiota por no haberlo conseguido ya ...
¡Gracias! Y el IMapProvider tendrá las funciones BeginGetImage y EndGetImage definidas, etiquetadas con "[OperationContract (AsyncPattern = true)]"? Y necesito definir el resultado específico de esto, GetImageAsyncResult? – stiank81
Correcto - Encontré una clase base AsyncResult en la web. GetImageAsyncResult se deriva de eso. – Goran
Bien, esto responde mi pregunta. Sin embargo, me he dado cuenta de que no quiero que el servicio sea asincrónico, pero quiero llamar al servicio síncrono de forma asíncrona. Es decir. Lo manejaré en el lado del cliente. Resuelvo esto fácilmente usando AsyncMethodCaller. ¡Gracias de cualquier manera! – stiank81