【发布时间】:2012-01-26 04:27:55
【问题描述】:
我有一些正在使用的 c# 代码
using (TransactionScope ts =
new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted }))
{
...
ts.Complete();
}
我收到以下错误。你知道为什么吗?
“/MyApp”应用程序中的服务器错误。
对 COM 组件的调用已返回错误 HRESULT E_FAIL。
描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。
异常详细信息:System.Runtime.InteropServices.COMException:错误 HRESULT E_FAIL 已从对 COM 组件的调用中返回。
来源错误:
在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。
堆栈跟踪:
[COMException (0x80004005): 错误 HRESULT E_FAIL 已返回 从对 COM 组件的调用。]
System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32 propgationTokenSize, Byte[] propgationToken, IntPtr managedIdentifier, Guid&事务标识符,OletxTransactionIsolationLevel& 隔离级别,ITransactionShim&transactionShim) +0
System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken(字节 [] 传播令牌)+384[TransactionManagerCommunicationException:与 底层事务管理器失败。]
System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken(字节 [] 传播令牌)+259971
System.Transactions.TransactionStatePSPEOperation.PSPEPromote(InternalTransaction 发送)+209
System.Transactions.TransactionStateDelegatedBase.EnterState(InternalTransaction 发送)+339
System.Transactions.EnlistableStates.Promote(InternalTransaction tx) +21 System.Transactions.Transaction.Promote() +60 System.Transactions.TransactionInterop.ConvertToOletxTransaction(Transaction 交易)+71
System.Transactions.TransactionInterop.GetExportCookie(交易 交易,Byte[]行踪)+309
System.Data.SqlClient.SqlInternalConnection.GetTransactionCookie(事务 交易,Byte[] whereAbouts) +45
System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(事务 发送)+630
System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(事务 交易)+45
System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection 拥有对象)+1466
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection 拥有连接)+84
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection externalConnection, DbConnectionFactory connectionFactory) +1645767
System.Data.SqlClient.SqlConnection.Open() +258
【问题讨论】:
-
很棒的异常消息,详细而无话可说。 E_FAIL 糟透了,仅表示“无法做到,不知道为什么”。这也是每个人都使用 Java 而不是 COM+ 的主要原因。如果修改配置或神奇的 SO 帖子无法解决问题,您将需要 Microsoft 支持。
-
如果您启用了防火墙,请确保已将其配置为供 MSDTC 使用。如果不是这样,按照 user9... 的建议重新安装 MSDTC 有时会神奇地修复它。
标签: c#