Delen via


Uitzonderingsactie Voor exemplaar vergrendeld

Met InstanceLockedExceptionAction de eigenschap van het SQL Workflow Instance Store kunt u opgeven welke actie de SQL-persistentieprovider moet ondernemen wanneer deze een InstanceLockedExceptionontvangt. De persistentieprovider ontvangt deze uitzondering wanneer deze probeert een werkstroomservice-exemplaar te vergrendelen dat momenteel is vergrendeld door een andere servicehost. De waarden voor deze eigenschap zijn NoRetry, BasicRetryen AggressiveRetry. De standaardwaarde is NoRetry. In de volgende lijst worden de drie opties beschreven:

  • NoRetry. De servicehost probeert het werkstroomservice-exemplaar niet te vergrendelen en geeft de InstanceLockedException door aan de aanroeper. Als uw werkstroom langer dan 60 seconden in het geheugen blijft, gebruikt NoRetry u als de nieuwe poging. De standaardwaarde is NoRetry.

  • BasicRetry. De servicehost probeert het werkstroomservice-exemplaar te vergrendelen met een lineair interval tussen nieuwe pogingen en geeft de InstanceLockedException door aan de aanroeper aan het einde van de reeks. Als uw werkstroom ongeveer 5-60 seconden in het geheugen blijft en berichten in batches binnenkomen waarbij de kans groter is dat berichten naar hetzelfde exemplaar op dezelfde host worden verzonden om alle berichten te verwerken voordat de werkstroom wordt verwijderd, gebruikt BasicRetry u om de beste latentie te bereiken zonder resources te verspillen.

  • AggressiveRetry. De servicehost probeert het werkstroomservice-exemplaar te vergrendelen met een exponentieel uitstelinterval tussen nieuwe pogingen en geeft de uitzondering aan het einde van de reeks door aan de aanroeper. Als uw werkstroom gedurende een zeer korte tijd (minder dan 5 seconden) in het geheugen blijft, of als een webfarm groot is en de kans dat een ander bericht bij dezelfde host wordt bezorgd, niet erg groot is, gebruikt AggressiveRetry u om de beste latentie te bereiken.

De functie Instantie vergrendelde uitzonderingsactie ondersteunt de volgende scenario's. Als in alle scenario's de eigenschap instanceLockedExceptionAction van de SqlWorkflowInstanceStore is ingesteld op BasicRetry of AggressiveRetry, probeert de host regelmatig opnieuw om de vergrendeling van exemplaren te verkrijgen.

  1. Het inschakelen van probleemloos afsluiten en overlappende recycling van toepassingsdomeinen. Stel dat een AppDomain met een servicehost waarop werkstroomservice-exemplaren worden uitgevoerd, wordt gerecycled en dat er een nieuw AppDomain wordt gebruikt om nieuwe aanvragen parallel af te handelen terwijl het oude AppDomain probleemloos wordt verwijderd. Het afsluiten wacht totdat de exemplaren van de werkstroomservice inactief zijn, waarna de exemplaren worden behouden en verwijderd. Pogingen van hosts in het nieuwe AppDomain om een exemplaar te vergrendelen, veroorzaken een InstanceLockedException.

  2. Het horizontaal schalen van duurzame werkstromen in een homogene farm van servers. Stel dat een knooppunt van een serverfarm waarop een werkstroomexemplaren wordt uitgevoerd, vastloopt en dat de werkstroomhost geen vergrendelingen kan verwijderen voor het exemplaar dat wordt uitgevoerd. Wanneer een servicehost die op een ander knooppunt van de farm wordt uitgevoerd, een bericht ontvangt voor dat werkstroomexemplaren, wordt geprobeerd vergrendelingen te verkrijgen op deze exemplaren.InstanceLockedException De vergrendelingen verlopen na enige tijd omdat de host die de vergrendeling had moeten vernieuwen, niet meer bestaat.

    Het horizontaal schalen van duurzame werkstromen in een homogene farm van servers. Stel dat u een duurzame werkstroom horizontaal wilt schalen met behulp van meerdere hosts achter een NLB (Netwerk Load Balancer), de werkstroomhost die wordt uitgevoerd op het ene knooppunt van de farm, een werkstroomexemplaren laadt en een bericht verwerkt, en het volgende bericht naar het exemplaar wordt doorgestuurd naar de host die op een ander knooppunt wordt uitgevoerd, omdat de NLB geen routeringsalgoritme heeft om berichten af te leveren aan de host waarop het exemplaar al wordt uitgevoerd. Na ontvangst van het bericht probeert de tweede host het werkstroomexemplaren te laden en ontvangt de InstanceLockedException omdat de eerste host een vergrendeling op het exemplaar heeft. De eerste host ontgrendelt het exemplaar wanneer het is voltooid met het verwerken van het eerste bericht en de tweede host verkrijgt de vergrendeling wanneer deze de volgende keer opnieuw probeert, laadt het exemplaar en verwerkt het tweede bericht.