首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自Machine.Config的Machine.Config值不会被C# winform应用程序获取。

来自Machine.Config的Machine.Config值不会被C# winform应用程序获取。
EN

Stack Overflow用户
提问于 2013-04-29 14:27:22
回答 3查看 17.1K关注 0票数 4

我一直在使用Oracle10g数据库开发一个winform应用程序,它使用machine.config并希望修改machine.config文件中指定的maxTimeOut值,我的machine.config文件位于以下位置(此应用程序使用.net 4)

代码语言:javascript
复制
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config 

最初,它中没有为maxTimeOut指定任何内容,因此默认为10分钟。为了修改它,我添加了maxTimeout="00:00:10"值,如下所示:

代码语言:javascript
复制
    <sectionGroup name="system.transactions" type="System.Transactions.Configuration.TransactionsSectionGroup, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null">
        <section name="defaultSettings" type="System.Transactions.Configuration.DefaultSettingsSection, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null"/>
        <section name="machineSettings" type="System.Transactions.Configuration.MachineSettingsSection, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" allowDefinition="MachineOnly" allowExeDefinition="MachineOnly" maxTimeout="00:00:10"/>
    </sectionGroup>

我重新启动了PC并运行了一个持续时间更长的测试--但事务在10秒后似乎不会中止,而是使用TransactionScopeOption参数中指定的scopeOption.TimeOut值(5分钟),事务在5分钟后超时。

我是否将maxTimeout值包含在上面正确的位置?文件中有什么需要修改的地方吗?为什么没有使用来自maxTimeout的machine.config的值?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-30 20:10:13

之所以没有得到它,是因为maxTimeOut值应该放在machine.config文件的末尾,就在关闭配置标记之前。一旦我这样做了,它就开始工作了。

代码语言:javascript
复制
<configuration>
    <!-- Other configuration sections-->
    <system.transactions>
        <machineSettings maxTimeout="01:00:00" />
    </system.transactions>
</configuration> 
票数 24
EN

Stack Overflow用户

发布于 2013-04-29 14:37:08

尝试在32位机器配置中设置值。

代码语言:javascript
复制
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config 

可能是将winforms设置为x86编译。还要检查是否还有odac事务超时设置和程序集要设置。

票数 2
EN

Stack Overflow用户

发布于 2020-11-05 08:15:27

可以使用s_maximumTimeouts_cachedMaxTimeout覆盖该值。

代码语言:javascript
复制
Type oSystemType = typeof(global::System.Transactions.TransactionManager);
System.Reflection.FieldInfo oCachedMaxTimeout = 
                    oSystemType.GetField("_cachedMaxTimeout", 
                    System.Reflection.BindingFlags.NonPublic | 
                    System.Reflection.BindingFlags.Static);
System.Reflection.FieldInfo oMaximumTimeout = 
                    oSystemType.GetField("_maximumTimeout", 
                    System.Reflection.BindingFlags.NonPublic | 
                    System.Reflection.BindingFlags.Static);
oCachedMaxTimeout.SetValue(null, true);
oMaximumTimeout.SetValue(null, TimeSpan.FromSeconds(2400));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16281187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档