Pregunta

Tengo un servicio de registro de WCF que se ejecuta funciona a través de MSMQ. Los elementos se registran en una base de datos SQL Server 2005. Cada funciones correctamente si se usa fuera de un choque de transacciones. Cuando se usa dentro de una instancia de Cape de transacciones, la llamada siempre hace que la transacción sea abortada. Message = "La transacción ha abortado".

¿Qué necesito hacer para que esta llamada funcione dentro de una transacción? ¿Es incluso posible? He leído que para que una transacción de cliente fluya a través de un límite de servicio, el enlace debe admitir el flujo de transacción, lo que limita inmediatamente los enlaces a solo netnamedPipinding, nettcpbinding, wshttpbinding, wsdualhttpbinding y wsfederationhttpbinding.

¿Fue útil?

Solución

No estoy íntimamente conocedor de MSMQ, pero hay una muy buena serie de publicaciones de blog de Tom Hollander en MSMQ, IIS y WCF: hacer que jueguen bien - En la Parte 3, que es el enlace, Tom habla sobre la transaccional.

MSMQ puede ser transaccional, o no. Y en WCF, puede decorar tanto el contrato de servicio como los contratos de operación individuales (métodos) con atributos relacionados con la transacción, como si permitir, no permitir o requerir un contexto de transacción.

Por lo que entiendo, en su configuración, no desea que la parte MSMQ sea transaccional, pero debería poder usarla incluso si hay una transacción ambiental presente. En este caso, debe agregar la transacciónflow = "permitido" a su contrato de operación como este:

[ServiceContract]
public interface ILoggingService
{
  [OperationContract]
  [TransactionFlow(TransactionFlowOption.Allowed)]
  void LogData(......);
}

¡Deberias hacer eso!

Bagazo

Otros consejos

Perdón por la pregunta innecesaria ...

He solucionado mi problema. Necesitaba colocar

[TransactionFlow(TransactionFlowOption.Allowed)]

en la operación en el contrato de servicio y luego

[OperationBehavior(TransactionScopeRequired=true)] 

sobre la implementación del contrato (el servicio en sí).

Funciona un regalo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top