标签: msdtc

TransactionScope会在某些机器上自动升级到MSDTC吗?

在我们的项目中,我们使用TransactionScope来确保我们的数据访问层在事务中执行它的操作.我们的目标是要求在最终用户的计算机上启用MSDTC服务.

麻烦的是,在我们开发人员的一半机器上,我们可以在禁用MSDTC的情况下运行.另一半必须启用它或他们得到"MSDTC on [SERVER] is unavailable"错误消息.

它真的让我摸不着头脑,让我认真地考虑回归到基于ADO.NET事务对象的家庭式的类似TransactionScope的解决方案.这看起来很疯狂 - 在我们开发人员的一半上工作(并且没有升级)的代码确实在其他开发人员上升级.

我希望得到一个更好的答案,跟踪为什么交易升级到DTC但不幸的是它没有.

这是一个会导致问题的示例代码,在尝试升级的机器上,它会尝试在第二个连接上升级.Open()(是的,当时没有其他连接打开.)

using (TransactionScope transactionScope = new TransactionScope() {
   using (SqlConnection connection = new SqlConnection(_ConStr)) {
      using (SqlCommand command = connection.CreateCommand()) {
         // prep the command
         connection.Open();
         using (SqlDataReader reader = command.ExecuteReader()) {
            // use the reader
            connection.Close();
         }
      }
   }

   // Do other stuff here that may or may not involve enlisting 
   // in the ambient transaction

   using (SqlConnection connection = new …
Run Code Online (Sandbox Code Playgroud)

.net c# msdtc transactions transactionscope

280
推荐指数
4
解决办法
7万
查看次数

如何在SQL Server上启用MSDTC?

这甚至是一个有效的问题吗?我有一个使用MSTDC的.NET Windows应用程序,它抛出异常:

System.Transactions.TransactionManagerCommunicationException:已禁用分布式事务管理器(MSDTC)的网络访问.请使用组件服务管理工具---> System.Runtime.InteropServices.COMException(0x8004D024)在MSDTC的安全配置中启用DTC以进行网络访问:事务管理器已禁用其对远程/网络事务的支持.(来自HRESULT的异常:0x8004D024)在System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32 propgationTokenSize,Byte [] propgationToken,IntPtr managedIdentifier,Guid&transactionIdentifier,OletxTransactionIsolationLevel&isolationLevel,ITransactionShim&transactionShim)....

我按照Kbalertz指南在安装了应用程序的PC上启用了MSDTC,但错误仍然存​​在.

我想知道这是否是数据库问题?如果是这样,我该如何解决?

sql-server msdtc

102
推荐指数
4
解决办法
22万
查看次数

无法开始分布式事务

我正在尝试对链接服务器运行SQL,但我得到了错误.

BEGIN DISTRIBUTED TRANSACTION
SELECT TOP 1 * FROM Sessions


OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is active.".

Msg 7391, Level 16, State 2, Line 3
The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "ASILIVE" was unable to begin a distributed transaction.
Run Code Online (Sandbox Code Playgroud)

提供程序返回了两个错误:

错误#1:

Number: $80040E14
Source: Microsoft OLE DB Provider for SQL Server
Description: OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is …
Run Code Online (Sandbox Code Playgroud)

sql-server msdtc sql-server-2005 distributed-transactions

89
推荐指数
3
解决办法
16万
查看次数

服务器'服务器上的MSDTC不可用

我在SQL Server上遇到这个奇怪的错误.我在旧帖子中找不到解决方案.

我有这个程序:

create proc _upJM_SyncAll_test
as
begin
    DECLARE @SQLString nvarchar(max)

set @SQLString = N'
DELETE FROM OPENQUERY([LOCAL_MYSQL],''SELECT acSubject FROM _utjm_setitemprices'') where acSubject not in (select acSubject from _uvJM_SetSubj)
DELETE FROM OPENQUERY([LOCAL_MYSQL],''SELECT acSubject FROM _utjm_setsubj'') where acSubject not in (select acSubject from _uvJM_SetSubj)

update a
set acName2 = b.acName2,
    acName3 = b.acName3,
    acAddress = b.acAddress,
    acPost = b.acPost,
    acPostName = b.acPostName, 
    acCountry = b.acCountry, 
    acVATCodePrefix = b.acVATCodePrefix,
    acCode = b.acCode, 
    anDaysForPayment = b.anDaysForPayment
from OPENQUERY([LOCAL_MYSQL],''SELECT * FROM _utjm_setsubj'') a join …
Run Code Online (Sandbox Code Playgroud)

sql-server msdtc linked-server

46
推荐指数
3
解决办法
6万
查看次数

MSDTC - 与底层事务管理器的通信失败

我收到错误:

与底层事务管理器的通信失败

当我试图从visual studio 2010运行我的应用程序.我在谷歌搜索此问题,我已尝试所有可能的解决方案来解决此错误.

在这里,我改变了我的DTC属性.

-- Network DTC Access
-- Allow Inbound
-- Allow Outbound
-- Allow Remote Administrator
-- Allow Remote Clients
-- No Authentication Required
-- Enable XA Transaction
-- Enable SNA LU 6.2 Transaction
Run Code Online (Sandbox Code Playgroud)

如果有人知道这个问题的解决方案,请告诉我.

谢谢Manoj Sitapara

c# msdtc

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

分布式事务完成.在新事务或NULL事务中登记此会话

只是好奇是否有其他人有这个特殊的错误,知道如何解决它?

情景如下......

我们有一个ASP.NET Web应用程序,使用在Windows Server 2008 IIS场上运行的Enterprise Library连接到SQL Server 2008群集后端.MSDTC已开启.数据库连接汇集在一起​​.

我怀疑是在某个地方有一个失败的MSDTC事务,连接被返回到池中,而另一个页面上的下一个查询正在拾取行为不当的连接并得到了这个特殊的错误.有趣的是,我们在一个不需要分布式事务(提交到两个数据库等)的查询中得到了这个错误.当我们收到错误时,我们只做了选择查询(没有事务).

我们进行了SQL分析,并且查询在SQL Server上运行,但从未返回(因为MSDTC事务已在连接中中止).

其他一些相关的错误是:

  • 不允许启动新请求,因为它应该带有有效的事务描述符.
  • 内部.Net Framework数据提供程序错误60.

sql asp.net msdtc transactions transactionscope

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

使用Transactional NTFS(TxF)获得任何真实的企业级体验?

背景:

我知道这太问题有关事务性NTFS(TxF的)和本文介绍如何使用它,但我正在寻找现实世界的经验,具有相当高容量企业系统,其中大量的BLOB数据(比如文件和/或照片)需要在交易时保留并多次阅读.

  • 我们期待每天写入数万个文档,每小时读取几万个文档.
  • 我们可以在文件系统或SQL Server中存储索引,但必须能够在几个框中扩展它.
  • 我们必须保留为灾难恢复轻松备份和恢复数据的能力.

问题:

  • 使用Transactional NTFS(TxF)获得任何真实的企业级体验?

相关问题:

  • 有人尝试使用TxF进行分布式事务,同一文件同时提交给两个镜像服务器吗?
  • 有人尝试过使用文件系统和数据库的分布式事务吗?
  • 您可以分享任何性能问题/可靠性问题/性能数据?在交易受到关注之前,有没有人甚至做过这种规模的事情?

编辑:为了更清楚,我已经研究了其他技术,包括SQL Server 2008的新FILESTREAM数据类型,但是这个问题仅针对事务文件系统.

更多资源:

.net c# msdtc ntfs txf

21
推荐指数
2
解决办法
2048
查看次数

我在哪里获得tracefmt.exe?我如何阅读MSDTC跟踪?

我按照MS的KB文章打开了MSDTC跟踪.不幸的是,它很难遵循,因为它没有假设读者非常合理和明显的期望,特别是"我如何阅读这个二进制日志文件?" 我也从MSDN读过这个页面,在那里我发现我无法读取日志文件,因为我错过了一些可执行文件tracefmt.exe,而且我显然是唯一一个遇到此问题的人.

因此我的问题是:为什么我没有tracefmt.exe,我从哪里得到它?或者,为了达到这一点:我如何阅读MSDTC跟踪日志?

windows msdtc

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

连接池被嵌套的ADO.NET事务损坏(使用MSDTC)

我无处可寻.

我将展示简单的代码片段,它介绍了如何轻松破坏连接池.
连接池损坏意味着每个新连接打开尝试都将失败.

要体验我们需要的问题:

  1. 在分布式交易中
  2. 嵌套的sqlconnection及其在sqlconnection和sqltransaction中的sqltransaction
  3. do rollback(explict或implict - 根本不提交)嵌套的sqltransaction

当连接池损坏时,每个sqlConnection.Open()抛出以下之一:

  • SqlException:不允许启动新请求,因为它应该带有有效的事务描述符.
  • SqlException:分布式事务已完成.在新事务或NULL事务中登记此会话.

在ADO.NET中有一些线程竞争.如果我Thread.Sleep(10)在代码中放置某个地方,它可能会将收到的异常更改为第二个.有时它会随着任何修改而改变.


如何重现

  1. 启用分布式事务处理协调器窗口服务(默认情况下已启用).
  2. 创建空控制台应用程序
  3. 创建2个数据库(可以为空)或1个数据库并取消注释行: Transaction.Current.EnlistDurable[...]
  4. 复制并粘贴以下代码:

var connectionStringA = String.Format(@"Data Source={0};Initial Catalog={1};Integrated Security=True;pooling=true;Max Pool Size=20;Enlist=true",
            @".\YourServer", "DataBaseA");
var connectionStringB = String.Format(@"Data Source={0};Initial Catalog={1};Integrated Security=True;pooling=true;Max Pool Size=20;Enlist=true",
            @".\YourServer", "DataBaseB");

try
{
    using (var transactionScope = new TransactionScope())
    {
        //we need to force promotion to distributed transaction:
        using (var sqlConnection = new SqlConnection(connectionStringA))
        {
            sqlConnection.Open();
        }
        // you can replace last 3 lines with: (the result …
Run Code Online (Sandbox Code Playgroud)

ado.net msdtc transactions transactionscope

19
推荐指数
1
解决办法
2535
查看次数

使用TransactionScope的异常"操作对事务状态无效"

我们在服务器#1上有一个Web服务,在服务器#2上有一个数据库.Web服务使用事务范围来生成分布式事务.一切都是正确的.

我们在服务器#3上有另一个数据库.我们在服务器上遇到了一些问题,我们重新安装了操作系统和软件.我们配置了MSDTC并尝试使用来自服务器#1的Web服务与该服务器上的数据库进行通信.现在,在事务范围内的第一个select语句之后,我们得到:The operation is not valid for the state of the transaction.如果使用事务范围,则此异常属于每个Web服务请求.服务器#2和服务器#3几乎相似.差异只能在设置中.在所有服务器上安装.NET Framework 3.5 SP1和SQL Server SP3.

完整的堆栈跟踪:

System.Transactions.TransactionState.EnlistPromotableSinglePhase(InternalTransaction TX,IPromotableSinglePhaseNotification promotableSinglePhaseNotification,事务AtomicTransaction的)вSystem.Transactions.Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification promotableSinglePhaseNotification)вSystem.Data.SqlClient.SqlInternalConnection.EnlistNonNull(事务TвSystem.Data.SqlClient.SqlInternalConnection .Enlist(事务t,System.Data.SqlClient.SqlInternalConnectionTds.Activate(事务事务),System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(事务事务),System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) - 系统. Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) - System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory) - System.Data.SqlClient.SqlConnection.Open()NHibernate.Connection.DriverConnectionProvider.GetConnection()вNHibernate.Impl.SessionFactoryImpl.OpenConnection()

我搜索了这条消息,但没有找到任何合适的解决方案.那么我应该检查哪些设置以及我应该做些什么来解决它?

c# sql-server nhibernate msdtc

18
推荐指数
2
解决办法
4万
查看次数