3

gibt es die folgenden FehlerHangfire: Azure SQL: Hinzufügen eines neuen Job

Interne Ausnahme fehlschlägt: „Der Objektverweis wurde nicht auf eine Instanz eines Objekts“ Stapelüberwachung: bei System.Transactions.Transaction.GetPromotedToken()

der Fehler aus der Leitung kommt connection.EnlistTransaction (Transaction.Current); im unteren Code, auch wenn ich in der Verbindungszeichenfolge enlist = false gesetzt habe.

`internal T UseTransaction<T>([InstantHandle] Func<DbConnection, DbTransaction, T> func, IsolationLevel? isolationLevel) 
    { 
    #if NETFULL 
     using (var transaction = CreateTransaction(isolationLevel ?? _options.TransactionIsolationLevel)) 
     { 
      var result = UseConnection(connection => 
      { 
       connection.EnlistTransaction(Transaction.Current); 
       return func(connection, null); 
      }); 

      transaction.Complete(); 

      return result; 
     } 
}` 

Wenn wir enlist = true setzen, erhalten wir einen Fehler bei der Verbindungslinie. Öffnen(); aus dem Code unten

internal DbConnection CreateAndOpenConnection() 
    { 
     if (_existingConnection != null) 
     { 
      return _existingConnection; 
     } 

     var connection = new SqlConnection(_connectionString); 
     connection.Open(); 

     return connection; 
    } 

beiden Verfahren liegen unter Hangfire.SqlServer.SqlServerStorage Klasse

Gleicher Code arbeitet, wenn auf die lokale DB (SQL-Server 2014) verbunden ist.

auf eine Diskussion gelandet WCF Transaction against Azure SQL DB, nicht sicher, ob es für dieses Problem relevant ist.

Edit:

HangFire Konfiguration

GlobalConfiguration.Configuration.UseSqlServerStorage(
       Database.ConnectionString, 
       new SqlServerStorageOptions 
       { 
        QueuePollInterval = TimeSpan.FromSeconds(10), 
        PrepareSchemaIfNecessary = true 
       }); 

Job Enqueue

BackgroundJob.Enqueue(() => Update(connectionToken, intFileUniqueId)); 

Bitte helfen. Vielen Dank im Voraus.

+0

Können Sie den Code hinzufügen, in dem Sie den Hanfire-Job hinzufügen? –

+0

Hallo, HangFire-Konfiguration und Job Enqueue Code-Schnipsel wurden hinzugefügt !!! –

+0

BackgroundJob.Enqueue (x => x.Update (connectionToken, intFileUniqueId)); Was ist x, können Sie auch den Code, der als Zeilenumbruch Zeile hinzufügen. –

Antwort

1

Das Problem gefunden. Der Aufruf der Methode zur Warteschlangenaufgabe war eine Transaktion, die zu einer Verteilungstransaktion führte und Azure SQL unterstützt sie nicht.

Betrachten Sie den Code unten:

public override void UpdateFile(int intUniqueId) 
    { 
     using (var scope = GetTransactionScope(...)) 
     { 
      QueueJob<Updater>(x => x.Update(token, intUniqueId)); 
      scope.Complete(); 
     } 
    } 


    private static void QueueJob<T>(Expression<Action<T>> action) 
    { 
      BackgroundJob.Enqueue(action); 
    } 

den Transaktionsbereich in Aufgerufene Methode funktioniert Entfernen. Ich überprüfe die Notwendigkeit der Transaktionsumfang, wenn nicht erforderlich, werde ich es entfernen. !!!

Verwandte Themen