在我们的项目中,我们使用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) 这甚至是一个有效的问题吗?我有一个使用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,但我得到了错误.
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上遇到这个奇怪的错误.我在旧帖子中找不到解决方案.
我有这个程序:
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) 我收到错误:
与底层事务管理器的通信失败
当我试图从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
只是好奇是否有其他人有这个特殊的错误,知道如何解决它?
情景如下......
我们有一个ASP.NET Web应用程序,使用在Windows Server 2008 IIS场上运行的Enterprise Library连接到SQL Server 2008群集后端.MSDTC已开启.数据库连接汇集在一起.
我怀疑是在某个地方有一个失败的MSDTC事务,连接被返回到池中,而另一个页面上的下一个查询正在拾取行为不当的连接并得到了这个特殊的错误.有趣的是,我们在一个不需要分布式事务(提交到两个数据库等)的查询中得到了这个错误.当我们收到错误时,我们只做了选择查询(没有事务).
我们进行了SQL分析,并且查询在SQL Server上运行,但从未返回(因为MSDTC事务已在连接中中止).
其他一些相关的错误是:
背景:
我知道这太问题有关事务性NTFS(TxF的)和本文介绍如何使用它,但我正在寻找现实世界的经验,具有相当高容量企业系统,其中大量的BLOB数据(比如文件和/或照片)需要在交易时保留并多次阅读.
问题:
相关问题:
编辑:为了更清楚,我已经研究了其他技术,包括SQL Server 2008的新FILESTREAM数据类型,但是这个问题仅针对事务文件系统.
更多资源:
我无处可寻.
我将展示简单的代码片段,它介绍了如何轻松破坏连接池.
连接池损坏意味着每个新连接打开尝试都将失败.
要体验我们需要的问题:
当连接池损坏时,每个sqlConnection.Open()抛出以下之一:
在ADO.NET中有一些线程竞争.如果我Thread.Sleep(10)在代码中放置某个地方,它可能会将收到的异常更改为第二个.有时它会随着任何修改而改变.
Transaction.Current.EnlistDurable[...]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) 我们在服务器#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()
我搜索了这条消息,但没有找到任何合适的解决方案.那么我应该检查哪些设置以及我应该做些什么来解决它?
msdtc ×10
c# ×4
sql-server ×4
transactions ×3
.net ×2
ado.net ×1
asp.net ×1
nhibernate ×1
ntfs ×1
sql ×1
txf ×1
windows ×1