标签: msdtc

跟踪事务升级到DTC的原因

有没有办法确定为什么System.Transaction TrasactionScope被升级到DTC?我们的一个组件似乎升级了交易,而所有其他组件(看起来似乎相似)都没有升级,我们正在碰撞.

是否提供了有关升级原因的信息以及如何找到和遵守这些信息?SQL事件探查器?日志文件?或者我在这个上运气不好?

更新:我正在运行SQL Server 2005以获取信息

msdtc trace system.transactions escalation

12
推荐指数
2
解决办法
4454
查看次数

MSDTC和防火墙

我们正在使用MSDTC进行SQL事务.我遇到了为MSDTC设置防火墙工作的问题.应用程序和SQL在不同的机器上运行.目前MSDTC正在工作,如果我关闭应用程序服务器上的防火墙.我认为应该为某些端口的防火墙设置添加异常.因此防火墙仍然可以打开,DTC也不会有任何问题.我不确定在防火墙设置中添加的端口(我确实尝试添加端口135但没有成功)

msdtc firewall

12
推荐指数
1
解决办法
2万
查看次数

由于通信问题,MSDTC事务管理器无法从源事务管理器中提取事务

我在服务器1上托管了我的Webapp,在服务器2上托管了我的数据库

但我得到了跟随错误

"与基础交易经理的沟通失败了."

我用Google搜索并发现一个帖子,其中提到了DTC(分布式事务)的问题我在server2(数据库服务器)上启用了DTC,并在防火墙中对它进行了例外处理.

在此输入图像描述

在此输入图像描述

但仍然是同样的错误.

这是完整的堆栈跟踪

消息:System.Transactions.TransactionManagerCommunicationException:与基础事务管理器的通信失败.---> System.Runtime.InteropServices.COMException:由于通信问题,MSDTC事务管理器无法从源事务管理器中提取事务.可能的原因是:存在防火墙且MSDTC进程没有例外,两台计算机无法通过其NetBIOS名称找到对方,或者两个事务管理器之一未启用对网络事务的支持.(从HRESULT异常:0x8004D02B)在System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32的propgationTokenSize,字节[] propgationToken,IntPtr的managedIdentifier,的Guid&transactionIdentifier,OletxTransactionIsolationLevel&的IsolationLevel,ITransactionShim&transactionShim)在System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken(字节[] propagationToken)

好心劝告

sql-server msdtc transactions windows-server-2003 windows-server-2008

12
推荐指数
2
解决办法
3万
查看次数

由于链接服务器的OLE DB提供程序“ SQLNCLI11”无法开始分布式事务,因此无法执行该操作

我正在尝试从我的计算机(SQL Server 2012)到客户端服务器(SQL Server 2008)运行分布式事务。

我正在尝试运行:

begin distributed transaction
select * from [172.01.01.01].master.dbo.sysprocesses
Commit Transaction
Run Code Online (Sandbox Code Playgroud)

我得到:

OLE DB provider "SQLNCLI11" for linked server "172.01.01.01" returned message "No transaction is active.".
Msg 7391, Level 16, State 2, Line 2
The operation could not be performed because OLE DB provider "SQLNCLI11" for linked server "172.01.01.01" was unable to begin a distributed transaction.
Run Code Online (Sandbox Code Playgroud)

我可以在服务器返回数据的情况下对它运行SELECT,因此至少我知道服务器可以互相看见,并且链接服务器存在并且正在运行

现在,网络上有很多与此相关的帖子,但我无法使其正常运行。到目前为止,这是我尝试过的操作:1.将DTC属性设置为以下内容(在两台服务器上) 在此处输入图片说明

  1. 从控制面板->服务(在两台服务器上)重新启动分布式事务处理协调器(MSDTC)。

  2. 卸载和安装的DTC(在两台服务器上)。

  3. 重新启动远程服务器。

  4. 关闭两台服务器上的防火墙。

  5. 在两个服务器上都启用了sp_configure'Ad Hoc Distributed Queries',1。

  6. 我运行了DTCPing,并成功ping通。

  7. 链接服务器的属性更改为以下内容: 在此处输入图片说明

还有什么可以尝试的?

更新:从另一台服务器到172.01.01.01运行事务。因此,问题不在目标服务器上,而是在源机器上。

sql-server msdtc distributed-transactions

11
推荐指数
3
解决办法
5万
查看次数

MSDTC的问题 - 远程事务

我们正在将我们的SQL Server移动到它自己的机器上,但是我遇到了通过MSDTC进行交易的问题.

这是ASP.Net为我生成的错误消息:

事务管理器已禁用其对远程/网络事务的支持

我试过谷歌搜索这个,但除了如何解决这个问题的Windows 2003指南之外,还没有找到更多.

谁能告诉我如何在Windows 2008上解决这个问题?(两个SqlServer + IIS框都运行Win 2k8).

谢谢!

sql-server msdtc transactions windows-server-2008

10
推荐指数
1
解决办法
2万
查看次数

MSDTC促进交易分发的可靠测试?

如何可靠地检查MSDTC是否已将事务提升为分布式事务?

这是在.net中使用TransactionScope时.

目前,同事正在通过关闭其计算机上的协调器来测试这一点 - 如果抛出异常,则将其视为促使事务发生的尝试的证据.这是一个有效的测试吗?

.net msdtc transactions distributed-transactions sql-server-2008

10
推荐指数
1
解决办法
2448
查看次数

MSDTC只在一个方向工作

我正在尝试TransactionScope用于单元测试,并且我在构建服务器上不断出错.在关注了几个有用的SO答案和博客之后,我安装了DTCPing并在两个server1&上运行它server2.当我以相反的顺序运行它时,它似乎在一个方向上连接而在另一个方向上失败:

++++++++++++Validating Remote Computer Name++++++++++++
Please refer to following log file for details:
    D:\KPAHQDEV043372.log
Invoking RPC method on teamcity
RPC test is successful
++++++++++++RPC test completed+++++++++++++++
++++++++++++Start DTC Binding Test +++++++++++++
Trying Bind to teamcity
Binding call to teamcity Failed
Session Down
Run Code Online (Sandbox Code Playgroud)

但是当我按照预期的方向运行它时,它就失败了

++++++++++++Validating Remote Computer Name++++++++++++
Please refer to following log file for details:
    C:\TEAMCITY3024.log
Invoking RPC method on kpahqdev04
Problem:fail to invoke remote RPC method
Error(0x6BA) at dtcping.cpp @303
-->RPC …
Run Code Online (Sandbox Code Playgroud)

msdtc transactionscope

10
推荐指数
1
解决办法
1万
查看次数

TransactionScope是否需要DTC服务?

从我正在阅读的内容来看,为了在.NET中使用TransactionScope,您需要在Windows中运行分布式事务处理协调器服务.我关闭了该服务,我的应用程序似乎运行相同,回滚交易没问题.

我错过了什么吗?它是如何工作的?我正在运行Windows 7并在VisualStudio 2010上运行webapp.

sql-server asp.net msdtc transactions transactionscope

10
推荐指数
2
解决办法
4418
查看次数

SqlConnection并避免升级到MSDTC

当我们需要在我们的应用程序中进行数据库访问时,我们使用以下模式:

  • 对于查询,我们有一个静态工厂类,其方法CreateOpenConnection只能执行new SqlConnection(myConnectionString)并调用Open()它.在我们执行查询之前调用此方法,并在查询返回后处理连接.
  • 对于插入/更新/删除,我们使用工作单元模式,其中更改被批处理并通过调用提交到数据库,work.Commit()如下所示:

work.Commit:

using (var tranScope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
    using (var conn = DapperFactory.CreateOpenConnection())
    {
      var count = _changeTracker.CommitChanges(conn);

      tranScope.Complete();

      return count;
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎非常适合作为Web服务的一部分进行一般使用,但是当我尝试将其与Rebus结合使用时,它正在给我MSDTC带来麻烦.

从我可以告诉,卤面(当它在队列中处理消息)创建一个新的TransactionScope,以便在故障处理消息的情况下,东西可以回滚.现在,到目前为止,这本身一直很好.我可以SqlConnection在没有任何问题的情况下在Rebus消息处理程序中打开一个新的内容(但是,在同一个Rebus 中使用我们的遗留实体框架查询手动SqlConnections TransactionScope不起作用,但我现在不认为这是一个问题).但昨天我问了以下问题:

在Rebus中串行处理某种消息类型

答案似乎是使用Rebus的传奇功能.我尝试实现它并配置它,以便Rebus saga持久化到新的SQL Server数据库(具有不同的连接字符串).据推测,使用该SQL Server持久性打开SqlConnection它自己的,因为每当我尝试创建一个SqlConnection现在,我得到以下异常:

已禁用分布式事务管理器(MSDTC)的网络访问.请使用组件服务管理工具在MSDTC的安全配置中启用DTC以进行网络访问.

在配置和性能开销方面,我非常非常希望避免使用MSDTC .我可能错了,但它似乎也没有必要.

我认为这里发生的事情是Rebus创建了一个环境TransactionScope,并且SqlConnection它创建了该范围的enlists.当我尝试创建自己的内容时,SqlConnection它也会尝试登记到该环境范围,并且因为涉及多个连接,它会被提升为MSDTC,但这会失败.

我知道如何解决这个问题,但我不知道这是否正确.我会做的是:

  • 添加Enlist=false到我的应用程序的连接字符串,以便它永远不会访问环境事务.
  • 修改Commit方法,以便它不会创建一个新的TransactionScope(我的连接将不再订阅,因为我只是告诉它不应该),但它使用conn.BeginTransaction.

像这样:

var …
Run Code Online (Sandbox Code Playgroud)

c# msdtc transactionscope sql-server-2012 rebus

10
推荐指数
1
解决办法
3904
查看次数

NServiceBus和NHibernate - 消息处理程序和事务

根据我的理解,NServiceBus在事务中执行IMessageHandler的Handle方法,如果异常传播出该方法,则NServiceBus将确保消息被放回消息队列(在错误队列之前上升X次)等.所以我们有一个原子操作可以这么说.

现在,如果我在NServiceBus Message Handle方法中,我会做这样的事情

using(var trans = session.BeginTransaction())
{ 

  person.Age = 10;
  session.Update<Person>(person);
  trans.Commit()
}

using(var trans2 = session.BeginTransaction())
{ 

  person.Age = 20;
  session.Update<Person>(person);
  // throw new ApplicationException("Oh no");
  trans2.Commit()
}
Run Code Online (Sandbox Code Playgroud)

这对交易范围有什么影响?就其与Nservicebus交易的关系而言,trans1现在被视为嵌套交易,即使我们没有做任何事情来嫁给他们吗?(如果不是如何链接到NServiceBus的交易?

查看第二个块(trans2),如果我取消注释throw语句,那么NServiceBus事务是否也会回滚trans1?在基本场景中,假设我将上述内容转储到控制台应用程序中,则trans1是独立的,提交,刷新且不会回滚.我想澄清现在我们坐在像NServiceBus这样的其他交易中会发生什么?

以上只是示例代码,我不会直接使用session,更像是通过uow模式.

nhibernate msdtc transactions nservicebus

9
推荐指数
1
解决办法
2721
查看次数