Sma*_*aug 5 .net c# transactionscope
我的应用程序已启用 transaction范围。以下代码已用于激活范围,已激活一小时。然而,10分钟后就结束了。
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required,TimeSpan.FromHours(1)))
{
// my code goes here.
}
Run Code Online (Sandbox Code Playgroud)
什么是奇怪的行为?为什么它的寿命不能达到一小时?
您必须在app.config(或web.config)中延长默认事务超时:
<configuration>
<system.transactions>
<defaultSettings timeout="00:03:00" />
</system.transactions>
</configuration>
Run Code Online (Sandbox Code Playgroud)
您还必须更改机器级别的配置,即您machine.config也必须编辑该文件。机器级别的默认最大事务超时为10 分钟。
例如,我在 machine.config 文件末尾添加了以下 XML:
<system.transactions>
<machineSettings maxTimeout="100.23:59:59" />
</system.transactions>
Run Code Online (Sandbox Code Playgroud)
该machine.config文件位于该C:\Windows\Microsoft.NET\Framework\[framework version]\Config目录中。
TransactionScope 的默认最大超时时间为 10 分钟。如果您使用更大的超时来创建它,它无论如何都会默默地将其减少到 10 分钟。这是一个相当令人惊讶的行为,但代码正是这样做的:
public TransactionScope(TransactionScopeOption scopeOption, TimeSpan scopeTimeout)
{
...
timeout = TransactionManager.ValidateTimeout(scopeTimeout);
...
}
Run Code Online (Sandbox Code Playgroud)
ValidateTimeout 将其减少为TransactionManager.MaximumTimeout
internal static TimeSpan ValidateTimeout(TimeSpan transactionTimeout)
{
...
if (TransactionManager.MaximumTimeout != TimeSpan.Zero && (transactionTimeout > TransactionManager.MaximumTimeout || transactionTimeout == TimeSpan.Zero))
{
return TransactionManager.MaximumTimeout;
}
return transactionTimeout;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1761 次 |
| 最近记录: |