Timeout ambito transazione su 10 minuti

Timeout ambito transazione su 10 minuti

Per chiarire ulteriormente:

Ambito transazione utilizza l'impostazione Configurazione macchina come timeout massimo. Il timeout macchina predefinito è 10 minuti.

Impostazione della configurazione della macchina su 2 ore:

      <system.transactions>
        <machineSettings maxTimeout="02:00:00"/>
      </system.transactions> 

L'app.config o web.config può essere utilizzato ridotto al timeout ma non può essere utilizzato per superare il timeout di configurazione della macchina.

Impostazione della configurazione dell'app su 1 ora:

<system.transactions>
     <defaultSettings timeout="01:00:00" />
</system.transactions>

Inoltre NON abbiamo ricevuto alcuna eccezione quando è stato raggiunto il limite, inoltre nessuna traccia o record del registro eventi.

Anche l'oggetto TransactionScope ha overload del costruttore che ti consentono di specificare un timeout, ma non sono sicuro di come venga gestito.


Per consentire alla transazione di richiedere più di 10 minuti, senza dover modificare machine.config, utilizza questo codice

    private void SetTransactionManagerField(string fieldName, object value)
    {
        typeof(TransactionManager).GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, value);
    }

    public TransactionScope CreateTransactionScope(TimeSpan timeout)
    {
        SetTransactionManagerField("_cachedMaxTimeout", true);
        SetTransactionManagerField("_maximumTimeout", timeout);
        return new TransactionScope(TransactionScopeOption.RequiresNew, timeout);
    }

Utilizzo:

using (var ts = CreateTransactionScope(TimeSpan.FromMinutes(20)))
{ 
    DoLongCode();
    ts.Complete();
}

Sulla base di questo articoloIl codice dell'articolo è stato originariamente incollato qui. Il codice nella risposta è ora rifattorizzato e semplificato.


Ciao puoi verificare maxTimeout nel tuo file di configurazione, se non hai questa sezione sul tuo web.config o app.config

Verifica il tuo machine.config

<configuration> 
  <system.transactions>
    <machineSettings maxTimeout=""/>
  </system.transactions>
</configuration> 

Regola il valore