Trnsactions in WCF
The default transaction timeout is really 1 minute, you can change that on the WCF service, if you want to change that default there are actually 3 places you might need to change. WCF, the application configuration and maybe the machine configuration
Changes to the WCF service
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple,
UseSynchronizationContext = true,
InstanceContextMode = InstanceContextMode.PerCall,
ReleaseServiceInstanceOnTransactionComplete = false,
TransactionTimeout = "01:00:00")]
Changes to the web.config
changing the transaction time-out to one hour
<system.transactions>
<defaultSettings timeout="01:00:00"/>
</system.transactions>
Changes to the machine config
<configuration> <system.transactions> <defaultSettings timeout="01:00:00" /> </system.transactions> </configuration>
Changing the machine.config transaction timout in code
Can also be done in code, by using reflection. I got the code from the blog here.
public void SetTrnsactionTimeout(TimeSpan timeOut)
{
//create a object of the type specified by the fully qualified name
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, timeOut);
}
No comments:
Post a Comment