Domanda

Ho un servizio di registrazione WCF che funziona su MSMQ. Gli elementi vengono registrati a un database SQL Server 2005. Ogni funzioni correttamente se utilizzata al di fuori di un transazione. Se utilizzata all'interno di un'istanza di transazione, la chiamata fa abortire sempre la transazione. Message = "La transazione è abortita".

Cosa devo fare per far funzionare questa chiamata all'interno di una transazione? È anche possibile. Ho letto che per una transazione client fluire su un limite di servizio, il legame deve supportare il flusso di transazione, il che limita immediatamente i legami solo a netnamedpipebinding, nettcpbinding, wshttpbinding, wsdualhttpbinding e wsfederationhttpbinding.

È stato utile?

Soluzione

Non sono intimamente ben informato su MSMQ, ma c'è davvero una buona serie di post sul blog di Tom Hollander MSMQ, IIS e WCF: farli giocare bene - Nella parte 3 che è il link fornito a Tom parla di diventare transazionali.

MSMQ può essere transazionale - o no. E in WCF, è possibile decorare sia il contratto di servizio che i singoli contratti di funzionamento (metodi) con attributi relativi alle transazioni, come se consentire, non consentire o richiedere un contesto di transazione.

Per quanto ho capito, nella tua configurazione, non vuoi che la parte MSMQ sia transazionale, ma dovresti essere in grado di usarla anche se è presente una transazione ambientale. In questo caso, è necessario aggiungere TransactionFlow = "consentito" al contratto operativo come questo:

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

Questo dovrebbe farlo!

Marc

Altri suggerimenti

Sorry for the needless question...

I have solved my problem. I needed to place

[TransactionFlow(TransactionFlowOption.Allowed)]

on the operation in the service contract and then

[OperationBehavior(TransactionScopeRequired=true)] 

on the implementation of the contract (the service itself).

Works a treat.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top