MVC 3: O gerenciador de transações MSDTC não pôde extrair a transação da origem
Estou usando o MVC 3 com entidades, agora eu usei a linha abaixo de códigos do meu controlador
<code> using (var scope = new TransactionScope()) { _myRepository.DeleteFM1(id); _myRepository.DeleteFM2(id, name); scope.Complete(); } </code>
e dentro do meuDeleteFM2 O método que é meu método definido na classe Entity é o seguinte:
<code> public void DeleteFM2(int id, string name) { var data= _repositoryMD.Fetch().Where(mColl => mColl.Col1 == id); if (data!= null) { //insert here is giving some error MSDTC error ! // here I prepare a message using the '**data**' _repositoryHistory.Insert(name, message, "FM2", "Delete", dateTime); _repositoryMD.Attach(data); _repositoryMD.Delete(data); _repositoryMD.SaveChanges(); } } } </code>
e eu tenho uma classe separada onde eu defini o método Insert como
<code> public bool Insert(string realName, string logMessage, string tableName, string changeType, DateTime dateTime) { var history = new History { ModifiedBy = realName, ChangeType = changeType, DateModified = dateTime, LogMessage = logMessage, TableName = tableName }; _repositoryHistory.Add(history); _repositoryHistory.SaveChanges(); return true; } </code>
Depois de inserir esta linha de código no método acima DeleteFM2
<code> _repositoryHistory.Insert(name, message, "FM2", "Delete", dateTime); </code>
Estou recebendo este erro, sem essa linha meu código funciona muito bem, eu usei essa linha em todos os meus outros métodos também, mesmo onde eu havia usado o escopo de transação, mas eu ainda não parecem entender o problema aqui. Por favor ajude. obrigado
O provedor subjacente falhou em Abrir.
System.Transactions.TransactionManagerCommunicationException: Falha na comunicação com o gerenciador de transações subjacente. ---> System.Runtime.InteropServices.COMException: O gerenciador de transações MSDTC não pôde extrair a transação do gerenciador de transação de origem devido a problemas de comunicação. Possíveis causas são: um firewall está presente e não tem uma exceção para o processo MSDTC, as duas máquinas não podem encontrar um ao outro por seus nomes NetBIOS, ou o suporte para transações de rede não está habilitado para um dos dois gerenciadores de transação. (Exceção de HRESULT: 0x8004D02B) em System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction (UInt32 propgationTokenSize, Byte [] propgationToken, IntPtr managedIdentifier, Guid & transactionIdentifier, OletxTransactionIsolationLevel e isolationLevel, ITransactionShim & transactionShim) em System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken (Byte [] propagationToken) --- Fim do rastreamento de pilha de exceção interna --- em System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken (Byte [] propagationToken) em System.Transactions.TransactionStatePSPEOperation.PSPEPromote (InternalTransaction tx) em System.Transactions.TransactionStateDelegatedBase.EnterState (InternalTransaction tx) em System.Transactions.EnlistableStates.Promote (InternalTransaction tx) em System.Transactions.Transaction.Promote () em System.Transactions.TransactionInterop.ConvertToOletxTransaction (Transaction transaction) em System.Transactions.TransactionInte rop.GetExportCookie (transação Transaction, Byte [] paradeiro) em System.Data.SqlClient.SqlInternalConnection.GetTransactionCookie (transação Transaction, Byte [] whereAbouts) em System.Data.SqlClient.SqlInternalConnection.EnlistNonNull (Transaction tx) em System.Data. SqlClient.SqlInternalConnection.Enlist (Transaction tx) em System.Data.SqlClient.SqlInternalConnectionTds.Activate (Transaction transaction) em System.Data.ProviderBase.DbConnectionInternal.ActivateConnection (Transaction transaction) em System.Data.ProviderBase.DbConnectionPool.GetConnection (DbConnection owningObject em System.Data.ProviderBase.DbConnectionFactory.GetConnection (DbConnection owningConnection) em System.Data.ProviderBase.DbConnectionClosed.OpenConnection (DbConnection outerConnection, DbConnectionFactory connectionFactory) em System.Data.SqlClient.SqlConnection.Open () em System.Data.EntityClient .EntityConnection.OpenStoreConnectionIf (Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection ori ginalConnection, String exceptionCode, String tryptedOperation, Boolean & closeStoreConnectionOnFailure)
Minhas configurações do FireWall