当前位置: 首页 > 编程语言 > C#

TransactionScopeTimeout10分钟分享

时间:2023-04-11 02:57:15 C#

TransactionScopeTimeout10Minutes我在C#中运行了一个很长的TransactionScope。我告诉范围它应该有很长的时间跨度,但我仍然会超时。是什么原因造成的?TransactionOptionstransactionOptions=newTransactionOptions();transactionOptions.IsolationLevel=IsolationLevel.ReadCommitted;transactionOptions.Timeout=TimeSpan.MaxValue;使用(varts=newTransactionScope(TransactionScopeOption.Required,transactionOptions)){;验证配置文件中的maxTimeout,如果您在web.config或app.config上没有此部分,请验证您的machine.config调整值以进一步说明:事务范围使用机器配置设置作为最大超时。默认机器超时为10分钟。将机器配置设置为2小时:App.config或web.config可以缩小到超时但不能用于超过机器配置超时。将应用程序配置设置为1小时:此外,当达到限制时,我们不会收到任何异常、没有跟踪或事件日志记录。此外,TransactionScope对象有一个构造函数重载,允许您指定超时,但我不确定如何处理它。要在不更改machine.config的情况下允许事务处理时间超过10分钟,请使用此代码空,值);}publicTransactionScopeCreateTransactionScope(TimeSpantimeout){SetTransactionManagerField("_cachedMaxTimeout",true);SetTransactionManagerField("_maximumTimeout",超时);返回新的TransactionScope(TransactionScopeOption.RequiresNew,超时);}用法:使用(varts=CreateTransactionScope(TimeSpan.FromMinutes(20))){DoLongCode();ts.完成();}基于这篇文章,文章的代码原贴在这里。答案中的代码现已重构和简化。它们不起作用,因为您试图更改错误上下文的超时。尝试使其更接近有效查询。你应该有这些背景:using(vartxn=newTransactionScope(TransactionScopeOption.Required,newTransactionOptions{IsolationLevel=System.Transactions.IsolationLevel.ReadUncommitted,Timeout=newTimeSpan(1,0,0)}))//1小时或wathever,不会影响任何东西{using(SqlConnectionconnection=newSqlConnection(ConnectionString)){intct=connection.ConnectionTimeout//(只读,这是有效的默认超时为15秒)connection.Open();SqlCommandselect=newSqlCommand(sql.query,connection);//绑定到服务器select.CommandTimeout=0;//考虑完整信息环境,您可以使用反射罩最大超时://允许修改varbReadOnly=(typeof(ConfigurationElement)).GetField("_bReadOnly",System.Reflection.BindingFlags.NonPublic|System.Reflection.BindingFlags.Instance);bReadOnly.SetValue(machineSettings,false);//更改最大允许超时machineSettings.MaxTimeout=TimeSpan.MaxValue;using(vart=newTransactionScope(TransactionScopeOption.Required,newTimeSpan(1,0,0))){//1小时交易//...}我解决了修改“物理文件”machine.config1的问题.您必须本地化文件:2.您必须添加以下代码:您可以在您的项目中添加此代码以延长事务处理时间。以上就是C#学习教程的全部内容:事务范围超过10分钟分享。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注---//这个用于设置事务超时时间为40分钟。类型oSystemType=typeof(global::System.Transactions.TransactionManager);System.Reflection.FieldInfooCachedMaxTimeout=oSystemType.GetField("_cachedMaxTimeout",System.Reflection.BindingFlags.NonPublic|System.Reflection.BindingFlags.Static);System.Reflection.FieldInfooMaximumTimeout=oSystemType.GetField("_maximumTimeout",System.Reflection.BindingFlags.NonPublic|System.Reflection.BindingFlags.Static);oCachedMaxTimeout.SetValue(null,true);oMaximumTimeout.SetValue(null,TimeSpan.FromSeconds(2400));本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: