Control de errores avanzado

En este ejemplo se muestra el servicio de enrutamiento de Windows Communication Foundation (WCF). El servicio de enrutamiento es un componente de WCF que permite incluir fácilmente un enrutador basado en contenido en una aplicación. Este ejemplo muestra el modo en que el servicio de enrutamiento se recupera de los errores de forma inteligente, utilizando transacciones y otros conceptos de mensajería más complejos, como la multidifusión.

Ee667251.Important(es-es,VS.100).gif Nota:
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 Windows Communication Foundation (WCF) y WF. Este ejemplo se encuentra en el siguiente directorio.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\RoutingServices\AdvancedErrorHandling

Detalles del ejemplo

En este ejemplo, el servicio de enrutamiento se configura para leer un mensaje de una cola de MSMQ y multidifundirlo a dos listas de colas. Una lista se utiliza para las colas de servicios y la otra para las colas de registro.

Dado que, de forma predeterminada, el enlace MSMQ para el que el servicio de enrutamiento está configurado para usar admite el uso de transacciones, el servicio de enrutamiento se asegura de que el mensaje es transaccional y se recibe en al menos una cola de cada lista antes de informar a la cola entrante (InQ) de que el mensaje se enrutó correctamente. Así, en el caso en el que tanto las colas de servicios como las colas de registro no estén disponibles, los informes del servicio de enrutamiento en las que no se pudo enrutar el mensaje y la cola entrante deberían actuar. Esta actuación consiste en mover el mensaje a la cola de mensajes no enviados del sistema.

Para utilizar este ejemplo

  1. Ee667251.Important(es-es,VS.100).gif Nota:
    Instale MSMQ antes de ejecutar este ejemplo. Si MSMQ no está instalado, se devuelve un mensaje de excepción al ejecutar el ejemplo. Se pueden encontrar instrucciones para la instalación de MSMQ en Instalación de Message Queuing (MSMQ).

    Con Visual Studio 2010, abra AdvancedErrorHandling.sln.

  2. Presione F5 o F6 en Visual Studio.

    1. Si compila la aplicación con F6, debe iniciar la aplicación en./RoutingService/bin/debug/RoutingService.exe.
  3. En la ventana de la consola, presione ENTRAR para iniciar el cliente.

  4. El cliente devuelve estadísticas diferentes acerca de las colas en cada caso.

    1. El siguiente es el resultado devuelto para el caso 1 (no hay errores).

      La cola entrante tiene 0 mensajes.
      La cola del servicio principal tiene 1 mensaje.
      La cola del servicio de reserva tiene 0 mensajes.
      La cola del registro principal tiene 1 mensaje.
      La cola del registro de reserva tiene 0 mensajes.
      Presione <Entrar> para continuar

    2. El siguiente es el resultado devuelto para el caso 3 (errores en las colas de servicio y registro principales).

      La cola entrante tiene 0 mensajes. 
      La cola del servicio principal no existe.
      La cola del servicio de reserva tiene 1 mensaje.
      La cola del registro principal no existe.
      La cola del registro de reserva tiene 1 mensaje.
      Presione <ENTRAR> para continuar.

    3. El siguiente es el resultado devuelto para el caso 4 (errores en las colas de registro principal y de reserva, y en la cola del servicio).

      La cola entrante tiene 0 mensajes. 
      La cola del servicio principal no existe.
      La cola del servicio de reserva tiene 0 mensajes.
      La cola del registro principal no existe.
      La cola del registro de reserva no existe.
      La cola de mensajes no enviados del sistema tiene 1 mensaje.
      Presione <ENTRAR> para salir.

    4. El siguiente es el resultado devuelto para el caso 2 (error en la cola de servicio principal).

      La cola entrante tiene 0 mensajes. 
      La cola del servicio principal no existe.
      La cola del servicio de reserva tiene 1 mensaje.
      La cola del registro principal tiene 1 mensaje.
      La cola del registro de reserva tiene 0 mensajes.
      Presione <ENTRAR> para continuar.

Configurable a través de código o App.onfig

El ejemplo viene configurado para utilizar un archivo App.config que define el comportamiento del enrutador. También puede cambiar el nombre del archivo RoutingService\App.config para que no se reconozca y cambiar el valor del campo configDriven en RoutingService\Program.cs a false para utilizar la configuración definida en el código. Cualquier método provoca el mismo comportamiento del enrutador.

Escenario

En este ejemplo se muestra que el servicio de enrutamiento puede administrar capacidades de mensajería avanzadas, como las transacciones y el contexto de recepción, y que puede utilizar estas capacidades como una parte de la administración correcta de los escenarios de error.

Escenario real

Contoso desea utilizar las recepciones transaccionales a través del servicio de enrutamiento para asegurarse de que todos los servicios necesarios reciben información incluso durante condiciones de error. Además, desean administrar los errores de forma correcta y automática, y los errores que se van a notificar en el caso de que un mensaje no pueda entregarse ni siquiera cuando se utiliza la lógica de control de errores. Para este propósito, configuran el servicio de enrutamiento para conmutar por error a extremos concretos según se prevea y para que el servicio del enrutamiento administre las situaciones de error, lo que incluye crear, completar y recuperar o anular los contextos de recepción y transacciones según convenga.