¿Cómo puedo escribir un servicio WCF asíncrono y un cliente que utilice WS-Addressing?

La Página de Wikipedia para WS-Addressing establece lo siguiente:

WS-Addressing admite el uso de interacciones asincrónicas mediante la especificación de un encabezado SOAP común (wsa:ReplyTo) que contiene la referencia del punto final.

Tengo un servicio WCF simple que expongo a través de SOAP. Puedo ver el WSDL y hay espacios de nombres XML en el nodo raíz que menciona el direccionamiento:

<wsdl:definitions ...
      xmlns:wsa10="http://www.w3.org/2005/08/addressing"  
      xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy"    
      xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"  
      xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"   
      ... 
 >

¿Puedo crear un WCF asíncrono (u otro .NET, pero no desde rayar) cliente que hace uso de WS-Addressing?

Agregué una referencia de servicio a una aplicación de consola y la clase de proxy parece correcta, pero ¿cómo sé que estoy aprovechando WS-Addressing? Sé que puedo ver las solicitudes HTTP para ver si hace llamadas asincrónicas, pero eso es un poco de prueba y error.

Sé que existe la casilla de verificación "Generar operaciones asincrónicas", supongo que esto utiliza el patrón de inicio/fin habitual que se encuentra en .NET y no en WS-Addressing.

preguntado el 12 de junio de 12 a las 13:06

1 Respuestas

Las operaciones asíncronas y el uso de WS-Addressing son ortogonales. El uso del direccionamiento se determina en función del enlace utilizado en el punto final y define el formato del mensaje intercambiado entre el cliente y el servidor.

El hecho de que la operación sea síncrona o asíncrona no tiene un impacto en el mensaje en el cable; puede tener el mismo mensaje definido como síncrono y asíncrono y deberían funcionar igual de bien.

Respondido el 12 de junio de 12 a las 15:06

¿Tengo razón al pensar que WS-Addressing permite la asincronía? Si es así, ¿cómo puedo probar que el servicio admite llamadas asíncronas? - Greg b

Y cuando marco "Generar operaciones asincrónicas", ¿se hace eso en el cliente .NET o hace uso de la infraestructura subyacente (es decir, WS-Addressing)? - Greg b

Puede tener operaciones asincrónicas incluso sin WS-Addressing. En lo que respecta al cliente, la principal diferencia entre las operaciones sincrónicas y asincrónicas es que, para las primeras, la solicitud de red se bloqueará hasta que llegue la respuesta, mientras que para las últimas no lo hará, es decir, si piensa en un paralelo con HttpWebRequest, llamada de operaciones de sincronización GetResponse, mientras que las operaciones asíncronas llaman BeginGetResponse / EndGetResponse. Eso es prácticamente todo lo que es, y es independiente de WS-Addressing. - carlosfigueira

Lo entiendo, pero ¿qué pasa con los clientes que no sean .NET? - Greg b

Eso dependerá de qué cliente estás hablando. Como se puede ver en el caso de .NET, un cliente puede ser asíncrono incluso sin WS-Addressing (o síncrono con él), por lo que no hay razones técnicas por las que una pila de clientes se vincule con la otra. - carlosfigueira

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.