asp.net - MSDTC - 与底层事务管理器的通信失败(防火墙打开,MSDTC 网络访问打开)

标签 asp.net transactionscope mstdc

我的 ASP.NET Web 表单系统出现问题。

它在我们的测试服务器上运行,但现在我们将其投入使用,其中一台服务器位于 DMZ 内,而 SQL 服务器位于 DMZ 之外(尽管仍然在我们的网络上 - 尽管是不同的子网)

我已经完全打开这两个框之间的防火墙,看看这是否是问题所在,但每当我们尝试使用“TransactionScope”时,它仍然会给出错误消息“与底层事务管理器的通信失败”。我们可以访问数据进行检索,只是事务破坏了它。

我们还使用msdtc ping来测试连接,并在防火墙上进行了修改,可以成功ping通,但出现同样的错误!

如何解决此错误?

任何帮助都会很棒,因为我们今天就有一个系统要上线。 panic :)

编辑:我创建了一个更简单的测试页面,其中包含如下交易,效果很好。嵌套事务是否会导致这种错误?如果是的话,为什么只有在带有防火墙的 dmz 中使用事件盒时才会出现问题?

AuditRepository auditRepository = new AuditRepository();

            try
            {
                using (TransactionScope scope = new TransactionScope())
                {
                    auditRepository.Add(DateTime.Now, 1, "TEST-TRANSACTIONS#1", 1);
                    auditRepository.Save();
                    auditRepository.Add(DateTime.Now, 1, "TEST-TRANSACTIONS#2", 1);
                    auditRepository.Save();

                    scope.Complete();
                }
            }
            catch (Exception ex)
            {
                Response.Write("Test Error For Transaction: " + ex.Message + "<br />" + ex.StackTrace);
            }

这是问题发生时我们得到的ErrorStack: 在

System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken(Byte[]
  propagationToken) at
  System.Transactions.TransactionStatePSPEOperation.PSPEPromote(InternalTransaction tx)
  at System.Transactions.TransactionStateDelegatedBase.EnterState(InternalTransaction tx)
  at System.Transactions.EnlistableStates.Promote(InternalTransaction tx) at
  System.Transactions.Transaction.Promote() at
  System.Transactions.TransactionInterop.ConvertToOletxTransaction(Transaction
  transaction) at System.Transactions.TransactionInterop.GetExportCookie(Transaction
  transaction, Byte[] whereabouts) at
  System.Data.SqlClient.SqlInternalConnection.GetTransactionCookie(Transaction
  transaction, Byte[] whereAbouts) at
  System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction tx) at
  System.Data.SqlClient.SqlInternalConnection.Enlist(Transaction tx) at
  System.Data.SqlClient.SqlInternalConnectionTds.Activate(Transaction transaction) at
  System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction
  transaction) at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection
  owningObject) at
  System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection
  owningConnection) at
  System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection
  outerConnection, DbConnectionFactory connectionFactory) at
  System.Data.SqlClient.SqlConnection.Open() at
  System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user) at
  System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe() at
  System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode() at
  System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression
  query) at
  System.Data.Linq.ChangeDirector.StandardChangeDirector.DynamicInsert(TrackedObject
  item) at System.Data.Linq.ChangeDirector.StandardChangeDirector.Insert(TrackedObject
  item) at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode) at
  System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) at
  System.Data.Linq.DataContext.SubmitChanges() at RegBook.classes.DbBase.Save() at
  RegBook.usercontrols.BookingProcess.confirmBookingButton_Click(Object sender, EventArgs e)

最佳答案

我意识到我提供的代码不会将事务升级到 DTC。我在一个事务中使用多个数据上下文时遇到了问题。

虽然我认为防火墙已打开,但它需要一系列端口,这就是问题仍然发生的原因。

This article helped me resolve it

关于asp.net - MSDTC - 与底层事务管理器的通信失败(防火墙打开,MSDTC 网络访问打开),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2498372/

相关文章:

c# - 两个远程 sql 连接时 Transactionscope 不工作

transactions - 分布式事务如何工作(例如 MSDTC)?

asp.net - 如何加快 Visual Studio 2010 中的编译时间

javascript - 如何使用javascript在点击后调用方法

c# - 动态单选按钮 CheckedChanged 事件不会触发

ASP.NET MVC3 : Publishing is excluding my CSS (. 少)文件

c# - 如果外部事务范围未完成,内部事务范围是否会回滚?

c# - 高级 System.Transactions 调试

c# - 使用 Sql Azure 的 Azure 应用服务上的 TransactionScope