Pergunta

Eu tenho um serviço de log WCF que executa opera o MSMQ. Os itens são registrados em um banco de dados SQL Server 2005. Todas as funções corretamente, se usadas fora de um transactionscope. Quando usado dentro de uma instância do transactionscope, a chamada sempre faz com que a transação seja abortada. Message = "A transação abortou".

O que eu preciso fazer para fazer com que essa chamada funcione dentro de uma transação? É até possível. Eu li que, para uma transação do cliente, fluir através de um limite de serviço, a ligação deve suportar o fluxo de transações, o que imediatamente limita as ligações a apenas NetNamedPipeBinding, nettcpbinding, wshttpbinding, WSDualHttpBinding e WSFederação.

Foi útil?

Solução

Não tenho muito conhecimento sobre o MSMQ, mas há uma boa série de postagens de blog de Tom Hollander em MSMQ, IIS e WCF: Fazer com que eles joguem bem - Na parte 3, o link, desde que Tom fala sobre como obter transações.

MSMQ pode ser transacional - ou não. E no WCF, você pode decorar o contrato de serviço e os contratos de operação individuais (métodos) com atributos relacionados à transação, como permitir, não permitir ou exigir um contexto de transação.

Até onde eu entendo, na sua configuração, você não deseja que a parte do MSMQ seja transacional - mas você poderá usá -la mesmo que uma transação ambiente esteja presente. Nesse caso, você precisa adicionar o transactionflow = "permitido" ao seu contrato de operação como este:

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

Isso deve resolver!

Marc

Outras dicas

Desculpe pela pergunta desnecessária ...

Eu resolvi o meu problema. Eu precisava colocar

[TransactionFlow(TransactionFlowOption.Allowed)]

na operação no contrato de serviço e depois

[OperationBehavior(TransactionScopeRequired=true)] 

na implementação do contrato (o próprio serviço).

Funciona um deleite.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top