c# - 是否可以在不允许升级到 DTC 的情况下将 .NET 的 TransactionScope 与 Sql Server 2005 一起使用?

标签 c# .net sql-server sql-server-2005 transactions

我正在处理屁股服务器中的一些非常痛苦的事情,我希望他们只使用没有 DTC 的事务(现在这样我可以专注于其他地方)。我在范围内使用多个数据库,所以典型的行为是促进,但我想避免它。如果可能的话,在此模型下,不确定交易的行为是什么?我假设 tx.Complete() 会抛出?

这是因为我得到了这些随机错误(如果你能提供帮助,请随意插话为什么会这样 - 这些是零星的,不是恒定的):

System.Transactions.TransactionManagerCommunicationException: Communication with the underlying transaction manager has failed. ---> System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component.

   at System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32 propgationTokenSize, Byte[] propgationToken, IntPtr managedIdentifier, Guid& transactionIdentifier, OletxTransactionIsolationLevel& isolationLevel, ITransactionShim& transactionShim)

   at System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken(Byte[] propagationToken)

   --- End of inner exception stack trace ---

   at 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()

最佳答案

不幸的是,我不认为在涉及多个数据库时避免将事务提升为 DTC 事务是不可能的,甚至是使用多个连接对象的单个数据库。

关于c# - 是否可以在不允许升级到 DTC 的情况下将 .NET 的 TransactionScope 与 Sql Server 2005 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1869886/

相关文章:

c# - 如何根据 XAML 中定义的 XMLDataProvider 数据计算平均值

c# - 将 IEnumeration 项目发布到 Controller

.net - 寻找仅在用户选中 CheckBox 时触发的事件

.net - 禁用并选择 asp.net mvc Html.RadioButtonFor

sql - 如何使用 t-sql 将下划线替换为空格?

sql-server - 如何在 SQL Server 2012 中获取最后插入的 ID

c# - 通过带有异步的 Entity Framework 运行存储过程是否会忽略 context.timeout

c# - 使用 MVC Controller 作为 webService

c# - 如何在忽略定界符的情况下拆分字符串?

sql-server - SQL Server Management Studio - 在表列表中使用多个过滤器?