Compartir a través de


Atributos de transacción de ServiceModel

Windows Communication Foundation (WCF) proporciona propiedades en tres atributos estándar System.ServiceModel que permiten configurar el comportamiento de las transacciones para un servicio WCF:

TransactionFlowAttribute

El TransactionFlowAttribute atributo especifica la voluntad de una operación en un contrato de servicio para aceptar transacciones entrantes de un cliente. El atributo proporciona este control con la siguiente propiedad: Las transacciones usan la TransactionFlowOption enumeración para especificar si una transacción entrante es Mandatory, Allowedo NotAllowed.

Este es el único atributo que relaciona las operaciones de servicio con las interacciones externas con un cliente. Los atributos descritos en las secciones siguientes se relacionan con el uso de transacciones dentro de la ejecución de la operación.

ServiceBehaviorAttribute (atributo de comportamiento de servicio)

El ServiceBehaviorAttribute atributo especifica el comportamiento de ejecución interna de una implementación de contrato de servicio. Entre las propiedades específicas de la transacción de este atributo se incluyen:

  • TransactionAutoCompleteOnSessionClose especifica si se debe completar una transacción no completada cuando se cierra la sesión. El valor predeterminado de esta propiedad es false. Si esta propiedad es true, y la sesión entrante se ha cerrado correctamente en lugar de cerrarse debido a fallos de red o del cliente, se completará correctamente cualquier transacción no completada. De lo contrario, si esta propiedad es false o si la sesión no se cerró correctamente, cualquier transacción no completada se revierte cuando se cierra la sesión. Si esta propiedad es true, el canal entrante debe estar basado en sesiones.

  • ReleaseServiceInstanceOnTransactionComplete especifica si la instancia de servicio subyacente se libera cuando se completa una transacción. El valor predeterminado de esta propiedad es true. El siguiente mensaje de entrada hace que se cree una nueva instancia subyacente, descartando cualquier estado por transacción que la instancia anterior pudiera haber mantenido. Liberar una instancia de servicio es una acción interna que el servicio realiza y no tiene ningún impacto en las conexiones o sesiones existentes que puedan haber establecido los clientes. Esta funcionalidad es equivalente a la característica de activación Just-In-Time que proporciona COM+. Si la propiedad es true, ConcurrencyMode debe ser igual a Single. De lo contrario, el servicio produce una excepción de validación de configuración no válida durante el inicio.

  • TransactionIsolationLevel especifica el nivel de aislamiento que se va a usar para las transacciones dentro del servicio; esta propiedad toma uno de los IsolationLevel valores. Si la propiedad de nivel de aislamiento local no es Unspecified, el nivel de aislamiento de una transacción entrante debe coincidir con el valor de esta propiedad local. De lo contrario, se rechaza la transacción entrante y se devuelve un error al cliente. Si TransactionScopeRequired es truey no se fluye ninguna transacción, esta propiedad determina el IsolationLevel valor que se va a usar para la transacción creada localmente. Si IsolationLevel se establece en Unspecified, IsolationLevelSerializable se usa .

  • TransactionTimeout especifica el período de tiempo en el que se debe completar una nueva transacción creada en el servicio. Si se alcanza esta hora y no se ha completado la transacción, se anulará. TimeSpan se utiliza como tiempo de espera TransactionScope para cualquier operación que tenga TransactionScopeRequired destablecida como true y para la que se creó una nueva transacción. El tiempo de espera es la duración máxima permitida desde la creación de la transacción hasta la finalización de la fase 1 en el protocolo de confirmación en dos fases. El valor de tiempo de espera utilizado siempre es el valor inferior entre la TransactionTimeout propiedad y el transactionTimeout valor de configuración.

OperationBehaviorAttribute

El OperationBehaviorAttribute atributo especifica los comportamientos de los métodos en la implementación del servicio. Puede usarlo para indicar el comportamiento de ejecución específico de la operación. Las propiedades de este atributo no afectan a la descripción del lenguaje de descripción del servicio web (WSDL) del contrato de servicio y son elementos puros del modelo de programación WCF que permiten características comunes que los desarrolladores tienen que implementar a sí mismos.

Este atributo tiene las siguientes propiedades específicas de la transacción:

  • TransactionScopeRequired especifica si un método debe ejecutarse dentro de un ámbito de transacción activo. El valor predeterminado es false. Si el OperationBehaviorAttribute atributo no está establecido para un método, también implica que el método no se ejecutará en una transacción. Si no se requiere un ámbito de transacción para una operación, cualquier transacción presente en el encabezado del mensaje no se activa y permanece como un elemento de IncomingMessageProperties del OperationContext. Si se requiere un ámbito de transacción para una operación, el origen de la transacción se deriva de uno de los siguientes elementos:

    • Si se fluye una transacción desde el cliente, el método se ejecuta en un ámbito de transacción creado mediante esa transacción distribuida.

    • Con un transporte en cola, se usa la transacción utilizada para quitar el mensaje de la cola. Tenga en cuenta que la transacción utilizada no es una transacción de flujo, en que no la proporcionó el remitente original del mensaje.

    • Un transporte personalizado puede proporcionar una transacción mediante el uso de TransportTransactionProperty.

    • Si ninguno de los anteriores proporciona un origen externo para una transacción, se crea una nueva Transaction instancia inmediatamente antes de llamar al método .

  • TransactionAutoComplete especifica si la transacción en la que se ejecuta el método se completa automáticamente, siempre y cuando no se generen excepciones no controladas. Si esta propiedad es true, la infraestructura que realiza la llamada marca automáticamente la transacción como "completada" si el método de usuario devuelve sin producir una excepción. Si esta propiedad es false, la transacción se adjunta a la instancia y solo se marca como "completado" si el cliente llama a un método posterior marcado con esta propiedad igual a o si un método subsiguiente llama explícitamente a trueSetTransactionComplete. Si no se lleva a cabo ninguna de estas acciones, la transacción nunca se "completa" y el trabajo contenido no se confirma, a menos que la propiedad TransactionAutoCompleteOnSessionClose esté establecida en true. Si esta propiedad se establece en true, debe usar un canal con una sesión y InstanceContextMode debe establecerse en PerSession.