2017-09-14 13 views

Antwort

0

Was passiert:

Wenn eine große Anzahl von Datensätzen Einfügen WCF mehrere parallele Anfragen stellt die Daten einzufügen. Die Standardeinstellung "UseAmbientTransaction" umschließt alle Einfügungen innerhalb einer einzelnen Transaktion. Wenn eine der eingefügten Zeilen eine Datenbankeinschränkung unterbricht, versucht sie, die Transaktion für alle Einfügungen rückgängig zu machen. Die Transaktionen geben alle die Orakel 1013-Ausnahme zurück, und die tatsächliche Ursache des Fehlers ist verloren.

Lösung:

Auf der Sendeport Registerkarte 'Transport Erweiterte Optionen' setzen die 'bestellt Delivery' Kasten überprüfen. Dies verhindert die parallelen Einfügeoperationen und die tatsächliche Ursache des Fehlers wird protokolliert.

+0

Sie fangen an, über die UseAmbientTransaction zu sprechen, aber dann sagen Sie, dass die Lösung Ordered Delivery ist. Das scheint nicht richtig zu sein. Bestellte Zustellung bedeutet nur, dass sie jeweils eine Nachricht liefert, nicht dass sie eine Batch-Einfügung mit einer Transaktion umschließt. – Dijkgraaf

+0

Die korrekte Reihenfolge der Zustellung verhindert, dass mehrere Nachrichten gleichzeitig angezeigt werden. Aufgrund eines Datenbankfehlers mit mehreren Prozessen und einer Umgebungstransaktion können Sie das eigentliche Problem nicht sehen. Dieser Fehler verhindert, dass Sie die Ursache sehen – Jay

1

Ich habe das gleiche Problem in der Vergangenheit. Mein Problem war, den "WCF-Custom" -Port mit OracleDBBinding zu verwenden, um einen Oracle PL aufzurufen. Diese PL war sehr langsam in ihrer Antwort und schließlich erhielt ich den Fehler "ORA-01013: Benutzer angefordert Abbrechen der aktuellen Operation".

Mein Problem wurde gelöst, die PL zu ändern. Ich denke, dass der Fehler von der Eigenschaft "ReceiveTimeout" des Sendeports verursacht wurde. Diese Eigenschaft besagt, dass "das WCF-Nachrichtenempfangszeitlimit angegeben wird. Dies bedeutet im Wesentlichen die maximale Zeit, die der Adapter auf eine eingehende Nachricht wartet.", Ich vermute, dass die WCF-Custom den Vorgang beendet und dann Oracle sendet, wenn ReceiveTimeout ausgeführt wird der Fehler.

Verwandte Themen