Compartir a través de


Compensación (ejemplo de BizTalk Server)

En el ejemplo compensación se muestra cómo usar la forma Compensar en una orquestación.

Descripción del ejemplo

Este ejemplo muestra cómo compensar la transacción que ya se ha confirmado en la orquestación mediante la siguiente secuencia de pasos:

  1. Especifique los datos del cliente en el formulario de InfoPath y envíelos a una orquestación que se haya expuesto como servicio Web.

  2. La orquestación tiene dos acciones paralelas. Una devuelve una confirmación al formulario de InfoPath y la otra actualiza las bases de datos Northwind y BTSCompensationSampleMailingList.

  3. En la segunda acción, la orquestación asigna el mensaje entrante a un formato de mensaje de aplicación de administración de relaciones con el cliente (CRM) y, a continuación, actualiza la tabla Customers en la base de datos Northwind. A continuación, se actualiza la tabla Lista de correo de la base de datos BTSCompensationSampleMailingList.

  4. Si alguna de las actualizaciones no se lleva a cabo correctamente, los cambios que se realicen en la base de datos Northwind se compensan llamando a un ensamblado externo para volver a escribir los datos originales del cliente en la base de datos.

Cómo se ha diseñado este ejemplo y por qué

Una forma Scope se usa principalmente para la ejecución transaccional y el control de excepciones, incluida la compensación. Un ámbito consta de dos bloques. El primer bloque es el bloque de contexto y el segundo bloque puede ser uno o más bloques de compensación o control de excepciones. Esto es similar a la instrucción try-catch del lenguaje de programación .NET. En la orquestación UpdateContact.odx, tienen lugar dos acciones paralelas. En la rama derecha, el bloque try es la forma Ámbito denominada Sistemas back-end actualizados, que tiene un tipo de transacción Long-Running y un identificador de transacción Upd_Backend. Cuanto más se desciende en el flujo, hay un bloque catch que detecta la excepción general e inicia la compensación.

Para obtener más información sobre la forma Ámbito , vea Ámbitos. Consulte también Cómo configurar la forma de ámbito.

Nota

La orquestación debe ser una transacción de larga duración para que establezca el tipo de transacción en Atomic o Long-Running.

En el bloque try, hay dos ámbitos denominados Update CRM y Update Mailing. Estos dos ámbitos son transacciones atómicas. En el ámbito Actualizar CRM hay bloque try y un bloque de compensación. El bloque try actualiza la base de datos Northwind mediante una llamada de método a un ensamblado externo. En el bloque de compensación tiene lugar la acción de compensación. Cuando se produce una excepción en el ámbito Actualización de sistemas de servidor, el código de la forma Deshacer expresión CRM vuelve a actualizar el registro y lo devuelve a su estado original. Esto se desencadena mediante la forma Compensar en el bloque Catch Exception ( Detectar excepción).

Nota

Las transacciones atómicas garantizan que todas las actualizaciones parciales se revertirán automáticamente si se produce un error durante la actualización de la transacción, y los efectos de la transacción se borrarán (excepto los efectos de cualquier llamada .NET que se haga en la transacción).

Nota

Una transacción de larga ejecución se considera confirmada cuando se ha completado la última instrucción contenida en ella. No se produce ninguna reversión automática del estado en caso de una anulación de transacción. Estos se puede conseguir mediante la programación de los controladores de excepción y compensación que se muestran en este ejemplo.

En el bloque catch, hay una forma Delay establecida durante diez segundos. Esto retrasa la acción de compensación. También hay una forma Compensar que inicia la acción de compensación en la transacción Upd_Backend.

Ocurre lo siguiente cuando la orquestación recibe el mensaje de entrada:

  1. El ensamblado UpdateCrm actualiza una fila de la base de datos Northwind.

  2. El ensamblado UpdateMailingList actualiza un registro coincidente de la base de datos BTSCompensationSampleMailingList.

  3. En caso de que se produzca un error al actualizar la base de datos Northwind, se genera una excepción y la orquestación sale del proceso.

  4. En caso de que se produzca un error durante la actualización de la base de datos BTSCompensationSampleMailingList, se genera una excepción y se produce un retraso de diez segundos antes de volver a escribir los datos originales del cliente en la base de datos Northwind.

Ubicación del ejemplo

< Ruta de acceso de> ejemplos\Orchestrations\Compensation\

En la tabla siguiente se enumeran los archivos del ejemplo y se describe su propósito.

Archivos Descripción
Cleanup.bat Archivo por lotes utilizado para desinstalar el ejemplo.
CompensationOrchestration.btproj Proyecto de orquestación.
CompensationSample.sln Solución de ejemplo.
CompensationSampleBinding.xml Enlazar datos de la orquestación (utilizado durante la instalación).
ContactInfo.xsd Esquema de mensaje de información de contacto.
ContactInfo.xsx Archivo de diseño del Diseñador de orquestaciones.
CreateSQLDataStore.sql Secuencia de comandos SQL para crear y rellenar la base de datos de ejemplo.
CrmSchema.xsd Esquema de mensaje de actualización de CRM.
MailingListSchema.xsd Esquema de actualización de mensajes de lista de correo.
RemoveVirDir.vbs Secuencia de comandos de Microsoft Visual Basic Scripting Edition (VBScript) para eliminar directorios virtuales y físicos de servicio Web (utilizados durante la desinstalación).
Request2Crm.btm Asignación de mensajes para traducir de una solicitud (información de contacto) al mensaje de actualización de CRM.
Request2MailingList.btm Asignación de mensajes para traducir de una solicitud (información de contacto) al mensaje de lista de correo.
Setup.bat Archivo por lotes para instalar este ejemplo.
UpdateContact.odx Archivo de orquestación.
UpdateRequest2UpdateResponse.btm Asignación de mensajes para traducir de una solicitud (información de contacto) al mensaje de respuesta.
UpdateResponse.xsd Esquema de mensajes de respuesta.
InfoPath\Información de contacto Update.xsn Archivo de Microsoft InfoPath utilizado para enviar formularios al servicio web de la orquestación.
UpdateCrm\AssemblyInfo.cs Archivo de origen de información del ensambladoUpdateCrm. (El ensamblado UpdateCrm actualiza la base de datos Northwind.)
UpdateCrm\UpdateCrm.cs Código de origen principal del ensamblado UpdateCrm.
UpdateCrm\UpdateCRM.csproj Archivo de proyecto UpdateCrm.
UpdateMailingList\AssemblyInfo.cs Archivo de origen de información del ensamblado UpdateMailingList. (El ensamblado UpdateMailingList actualiza la base de datos de ejemplo.)
UpdateMailingList\UpdateMailingList.cs Código de origen principal del ensamblado UpdateMailingList.
UpdateMailingList\UpdateMailingList.csproj Archivo de proyecto UpdateMailingList.

Crear e inicializar este ejemplo

Para crear e iniciar el ejemplo Compensación

  1. En una ventana de comandos de Visual Studio, vaya a la siguiente carpeta:

    < Ruta de acceso de> ejemplos\Orchestrations\Compensation\

  2. Ejecute el archivo Setup.bat, que realiza las acciones siguientes:

    • Generar e implementar el ensamblado de ejemplo.

    • Cuando se inicie el Asistente para publicación servicios web de BizTalk, realice las siguientes acciones de forma manual:

    1. En la página Asistente para publicación de servicios web de BizTalk , haga clic en Siguiente.

    2. En la página Crear servicio web , seleccione Publicar orquestación de BizTalk como servicios web y, a continuación, haga clic en Siguiente.

    3. En la página Ensamblado de BizTalk , busque y seleccione <Ruta de> acceso de ejemplos\Orchestrations\Compensation\bin\Release\CompensationOrchestration.dll y, a continuación, haga clic en Siguiente.

    4. En la página Orquestaciones y puertos , haga clic en Siguiente.

    5. En la página Propiedades del servicio web , en Espacio de nombres de destino del servicio web, escriba http://Microsoft.BizTalk.Samples.Compensation/y, a continuación, haga clic en Siguiente.

    6. En la página Proyecto de servicio web , en Ubicación, escriba http://localhost/CompensationOrchestrationWebServiceProxy.

    7. Active la casilla Permitir el acceso anónimo al servicio web .

    8. Active la casilla Crear ubicación de recepción de BizTalk en la siguiente aplicación .

    9. En el menú desplegable Crear ubicación de recepción de BizTalk en el menú desplegable siguiente , seleccione Aplicación de BizTalk 1 en la lista desplegable y, a continuación, haga clic en Siguiente.

    10. En la página Resumen del proyecto de servicio web , haga clic en Crear.

    11. En la página Finalización del Asistente para publicación de servicios web de BizTalk , haga clic en Finalizar.

  3. El programa de instalación crea y enlaza puertos, crea la base de datos de servidor del ejemplo y agrega ensamblados de C# a la caché de ensamblados global.

    Nota

    Debe confirmar que BizTalk Server no ha notificado ningún error durante el proceso de generación e inicialización antes de intentar ejecutar este ejemplo.

Ejecución del ejemplo

Después de generar e inicializar este ejemplo, tenga en cuenta lo siguiente antes de ejecutarlo:

  • Si ejecuta este ejemplo en Windows Server 2008 SP2 o Windows Server 2008 R2, debe crear un grupo de aplicaciones de IIS y establecer su identidad en una cuenta que sea miembro del grupo de Windows Usuarios de aplicaciones de BizTalk. También debe actualizar el directorio virtual del servicio de orquestación Web para ejecutarlo dentro de este grupo de aplicaciones.

  • Agregue una cuenta ASPNET al grupo de usuarios de hosts aislados de BizTalk.

  • Conceda al grupo usuarios de aplicaciones de BizTalk permiso db_owner a las bases de datos BTSCompensationSampleMailingList y Northwind .

  • Si BizTalk Server no está instalado en la ubicación predeterminada (unidad:\Archivos de programa\Microsoft BizTalk Server <versión>\), debe publicar el formulario Contact Info Update.xsn antes de usarlo. Para ello, haga lo siguiente.

    Para publicar el formulario de InfoPath

    1. En Internet Explorer, en el menú Herramientas, haga clic en Opciones de Internet.

    2. En la pestaña Seguridad , haga clic en Internet y, a continuación, haga clic en Nivel personalizado.

    3. En la sección Varios , asegúrese de que la opción Acceso a orígenes de datos entre dominios está habilitada y, a continuación, haga clic en Aceptar. Esta configuración es necesaria para que se ejecute el código de las secuencias de comandos de la solución de interfaz de usuario de InfoPath.

    4. En el Explorador de Windows, vaya a <Samples Path>\Orchestrations\Compensation\InfoPath, haga clic con el botón derecho en Contact Info Update.xsn y, a continuación, haga clic en Diseño.

    5. La solución de actualización de la información de contacto de InfoPath se abre en modo de diseño.

    6. En la aplicación InfoPath Contact Info Update, en el menú Archivo , haga clic en Publicar.

    7. Aparece el Asistente para publicación.

    8. Seleccione To a shared folder on this computer or on a network and publish the solution to the path <Samples Path>\Orchestrations\Compensation\InfoPath\Contact Info Update.xsn.

    9. Cierre el modo de diseño de InfoPath.

  • Está listo para ejecutar este ejemplo.

    Para ejecutar el ejemplo Compensación

    1. Haga doble clic en Contact Info Update.xsn para abrirlo en InfoPath.

    2. Rellene el formulario de una cuenta que exista en las dos bases de datos. Por ejemplo, utilice un Id. de cuenta existente "ALFKI" desde la tabla Northwind Customers.

    3. En el menú Archivo , seleccione Enviar y haga clic en Enviar.

    4. El documento de respuesta debe aparecer en la < carpeta Samples Path>\Orchestrations\Compensation\Out y las bases de datos BTSCompensationSampleMailingList deben actualizarse con los nuevos datos del formulario de InfoPath.

      Nota

      Puede desasociar la base de datos BTSCompensationSampleMailingList o ponerla fuera de conexión para probar la acción de compensación que lleva a cabo la orquestación. Tenga en cuenta que el registro se actualiza en la base de datos Northwind en primer lugar. A continuación, cuando la orquestación intenta actualizar la base de datos BTSCompensationSampleMailingList, porque se ha desasociado la base de datos, se produce un error al intentar llevar a cabo la actualización. Por tanto, se genera una excepción y se produce un retraso de diez segundos antes de que se ejecute la acción de compensación para volver a escribir los datos originales del cliente en la base de datos Northwind.

      Nota

      Es posible que aparezca el mensaje "Error de inicio de sesión del usuario [APPPOOL de IIS\DefaultAppPool]". Esto puede deberse al error de validación en el acceso al servidor basado en autorización token. Para resolver este error, cree un nuevo grupo de aplicaciones y use la cuenta de administrador en él.

Desinstalar este ejemplo

Para desinstalar el ejemplo Compensación

  1. En una ventana de comandos de Visual Studio, vaya a la siguiente carpeta:

    < Ruta de acceso de> ejemplos\Orchestrations\Compensation\

  2. Ejecute Cleanup.bat.

Consulte también

Orquestaciones (carpetas de ejemplos de BizTalk Server)