Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El canal de confirmación HTTP es un ejemplo de canal en niveles que cambia el modelo de mensajería unidireccional, permitiendo que un servicio confirme o rechace los mensajes entrantes en lugar de enviar una confirmación de recibo automáticamente. Además, permite al servicio retrasar la confirmación hasta que pueda tener la garantía de que el mensaje se procesará.
Demostraciones
ReceiveContext, ejemplo del canal en niveles (canal de confirmación HTTP).
Análisis
El canal de confirmación HTTP implementa ReceiveContext para volver a dar forma al patrón de mensajería solicitud-respuesta HTTP para un modelo unidireccional con confirmación demorada. Con este nuevo modelo, un servicio puede garantizar el procesamiento de los mensajes enviando una confirmación en forma de código de estado OK 200 de HTTP sin bloquear el cliente hasta que el procesamiento de mensajes se complete o puede enviar un mensaje de error al cliente en forma de código de estado de error de servidor interno 500 de HTTP. Por ejemplo, un servicio podría enviar una confirmación después de escribir un mensaje en una cola y, a continuación, continuar el procesamiento del mensaje de forma asincrónica. En este escenario, un cliente podría estar seguro de que el servicio procesó al menos una vez sus mensajes, si reenviara cada mensaje hasta que recibiera una confirmación del servicio. Tenga en cuenta que si un servicio requiere el procesamiento de mensajes asincrónico a través de HTTP sin ninguna garantía del procesamiento de los mensajes, es más adecuado usar OneWayBindingElement.
ReceiveContext se utiliza para conservar el mensaje en su lugar mientras se determina si se puede procesar en el servicio. La capacidad de un servicio para procesar el mensaje correctamente se indica llamando a Complete en el objeto ReceiveContext, que envía un código de estado OK de HTTP y si el servicio puede procesar el mensaje, se indica llamando al método Abandon del objeto ReceiveContext en el objeto ReceiveContext, que envía un código de estado de error de servidor interno HTTP.
En este ejemplo, el cliente solicita la información de procesamiento enviando un identificador de empleado. En el extremo del servicio, si el identificador de empleado recibido es mayor que 50, el servicio envía un código de estado de HTTP 500 (error de servidor interno) al cliente; de lo contrario, se supone que el procesamiento se puede hacer correctamente y envía un código de estado HTTP 200 (correcto) al cliente.
Para configurar, compilar y ejecutar el ejemplo
Abra Visual Studio 2010 con privilegios de administrador.
Abra la solución HttpAckChannel.
Inicie una nueva instancia del proyecto Servicio haciendo clic con el botón secundario en el proyecto en el Explorador de soluciones y seleccionando Depurar, Iniciar nueva instancia desde el menú contextual.
Inicie una nueva instancia del proyecto Cliente haciendo clic con el botón secundario en el proyecto en el Explorador de soluciones y seleccionando Depurar, Iniciar nueva instancia desde el menú contextual.
Cuando el servicio se haya iniciado, presione Entrar en la ventana de cliente para permitir al cliente enviar un mensaje al servicio.
El primer mensaje se procesa en el servicio y envía un código de estado OK de HTTP al cliente.
El segundo mensaje es incorrecto y envía un código de estado de error de servidor interno de HTTP al cliente, que genera un CommunicationException en el cliente.
![]() |
---|
Puede que los ejemplos ya estén instalados en su equipo. Compruebe el siguiente directorio (valor predeterminado) antes de continuar.
<InstallDrive>:\WF_WCF_Samples
Si no existe este directorio, vaya a la página de ejemplos de Windows Communication Foundation (WCF) y Windows Workflow Foundation (WF) Samples para .NET Framework 4 para descargar todos los ejemplos de WF y Windows Communication Foundation (WCF). Este ejemplo se encuentra en el siguiente directorio.
<InstallDrive>:\WF_WCF_Samples\WCF\Extensibility\Channels\HttpAckChannel
|