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
using (var scope = new TransactionScope())
{
_myRepository.DeleteFM1(id);
_myRepository.DeleteFM2(id, name);
scope.Complete();
}
e dentro do meuDeleteFM2 O método que é meu método definido na classe Entity é o seguinte:
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();
}
}
}
e eu tenho uma classe separada onde eu defini o método Insert como
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;
}
Depois de inserir esta linha de código no método acima DeleteFM2
_repositoryHistory.Insert(name, message, "FM2", "Delete", dateTime);
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