所以我有以下代码:
var transactionScopeOptions = new TransactionOptions() { IsolationLevel = IsolationLevel.ReadUncommitted, Timeout = TimeSpan.FromMinutes(2) };
using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOption.Required, transactionScopeOptions))
{
/* Linq update, insert, delete, read, etc. */
protected const string UpdateQuery = @"SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
BEGIN TRANSACTION;
/* dirty reads & 3 table updates */
COMMIT TRANSACTION;"
dataContext.ExecuteCommand(UpdateQuery, new object[] { fooID, fooTime })
transactionScope.Complete();
}
首先,我不做Linq到Sql字符串查询,然后在一个类中,我使用了很长的字符串查询来更新3个表。这是我得到例外的部分。 (在ExecuteCommand中)
环境是WCF多线程,项目开始时有一个日志,项目结束时有另一个日志,这不是超时异常。
我处理了超过数十万个并发设置为多个的项目。
知道抛出异常的原因吗? dataContext仅对每个项目实例化一次。
编辑:命令超时设置为1小时,错误发生在启动后的几分钟内。如果队列中的项目少于100,000个,通常不会发生这种情况。
编辑: stacktrace:
在 System.Transactions.TransactionState.EnlistPromotableSinglePhase(InternalTransaction tx,IPromotableSinglePhaseNotification promotableSinglePhaseNotification,Transaction atomicTransaction)
在 System.Transactions.Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification promotableSinglePhaseNotification)at System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(交易 tx)at System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(交易 交易) System.Data.ProviderBase.DbConnectionPool.TryGetConnection(的DbConnection owningObject,UInt32 waitForMultipleObjectsTimeout,Boolean allowCreate,Boolean onlyOneCheckConnection,DbConnectionOptions userOptions,DbConnectionInternal&连接) System.Data.ProviderBase.DbConnectionPool.TryGetConnection(的DbConnection owningObject,TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource
1重试,DbConnectionOptions userOptions,DbConnectionInternal&连接) System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(的DbConnection outerConnection,DbConnectionFactory connectionFactory, TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource
1 重试)在System.Data.SqlClient.SqlConnection.Open()处 System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser 用户)在System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe()at System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode()at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(表达式 查询)在System.Data.Linq.DataContext.ExecuteCommand(String 命令,对象[]参数)
答案 0 :(得分:0)
您可以尝试在连接字符串中关闭连接池,我注意到在SQL操作通过IIS登记的分布式事务已提交或回滚之前,连接似乎已返回到池中。虽然这样做的症状是ussaly连接超时,但它可能值得一试。
ADD“pooling = false;”到您的连接字符串