BITS-Auftragszustände
Es gibt vier Klassen von BITS-Zuständen: Starten, Aktion, übertragen und endgültig. Wenn ein Auftrag ausgeführt wird, wechselt er zwischen Zuständen in den verschiedenen Zustandsklassen. Sobald sich ein Auftrag in einem endgültigen Zustand befindet, wird er nicht aus dem endgültigen Zustand verschoben und wird nicht in einer Auftragsenumerationangezeigt.
Zustandsverändernde Methoden
Es gibt vier Zustandsänderungsmethoden für einen Auftrag: Cancel, Complete, Resumeund Suspend. Solange sich ein Auftrag nicht in einem endgültigen Zustand befindet, können Sie eine der zustandsverändernden Methoden aufrufen.
Die Suspend-Methode wird verwendet, um einen Auftrag in den ZUSTAND SUSPENDED zu wechseln. Wenn ein Auftrag angehalten wird, werden alle Übertragungen beendet und erst fortgesetzt, wenn Sie "Fortsetzen" anrufen. Ein bereits angehaltener Auftrag bleibt einfach angehalten.
Die Resume-Methode wird verwendet, um einen angehaltenen Auftrag zu starten. Aufträge in einem Fehler- oder vorübergehenden Fehlerzustand werden so eingerichtet, dass sie erneut versucht werden. Aufträge, die sich derzeit in einem Aktionszustand befinden, bleiben in diesem Zustand.
Die Cancel-Methode wird verwendet, um einen Auftrag abzubrechen. Der Zustand wird auf "Abgebrochen" umgestellt. Alle derzeit übertragenen Dateien werden nicht abgeschlossen. Alle vollständig übertragenen und teilweise übertragenen Dateien werden gelöscht.
Die Complete-Methode beendet eine Übertragung. Alle vollständig heruntergeladenen Dateien werden aufbewahrt; Dateien, die nicht vollständig übertragen werden, werden gelöscht.
Sie müssen entweder "Abbrechen" oder "Abgeschlossen" aufrufen, um Ihren Auftrag in einen endgültigen Zustand zu verschieben und bereinigt zu werden. Aufträge, die nicht in einen endgültigen Zustand umgestellt werden, verschwenden Systemressourcen. BITS bricht schließlich automatisch alte Aufträge ab. Der standard JobInactivityTimeout besteht darin, Aufträge nach 90 Tagen abzubrechen.
Startzustand
Der Startzustand ist ANGEHALTEN. Von hier aus können Sie dem Auftrag Dateien hinzufügen und Auftrags- und Dateieigenschaften festlegen. Um eine Auftragsübertragung zu starten, rufen Sie "Fortsetzen" für den Auftrag auf. Wenn Sie einen Auftrag ohne Dateien fortsetzen, wird ein BG_E_EMPTY Fehlercode zurückgegeben, und der Auftrag bleibt angehalten.
Aktionszustände
Die QUEUED, CONNECTING und ÜBERTRAGEN Status zeigen die aktuelle interne Aktivität Ihres Auftrags an. Ein Auftrag, der IN DIE WARTESCHLANGE gestellt wird, kann auf den BITS-Scheduler warten oder auf die Anmeldung des Benutzers warten. Ein Auftrag, der eine VERBINDUNG herstellt, versucht, eine Verbindung mit dem Server herzustellen, um mit der Übertragung von Dateien zu beginnen. Ein Auftrag, der ÜBERTRAGEN wird, lädt Ihre Dateien aktiv hoch oder herunter.
Der TRANSIENT ERROR Zustand bedeutet, dass der Auftrag versucht hat und die Datei nicht übertragen konnte. Dies kann aus Gründen der Netzwerkrichtlinie erfolgen; Der Auftrag kann blockiert werden, da das aktuelle Netzwerk zu teuer ist. Es kann auch aus Systemgründen blockiert werden, z. B. aus Systemgründen, die sich im Stromsparmodus oder im Spielmodus befinden, oder weil keine Internetverbindung vorhanden ist.
Aufträge im vorübergehenden Fehlerzustand werden bei Bedarf automatisch von BITS wiederholt. BITS enthält eine MinimumRetryDelay- und NoProgressTimeout Wert, um zu steuern, wann ein Auftrag erneut versucht wird und wann BITS schließlich den Wiederholungsversuch beenden wird.
Übertragene Zustände
Die übertragenen Zustände treten auf, wenn keine Übertragung mehr erfolgt. Sie müssen entweder einen Auftrag in diesem Zustand abbrechen oder abschließen. Sie können auch weitere Dateien zum Übertragen und Aufrufen von Resume() hinzufügen, aber dies ist keine gängige Methode.
Der FEHLER- Zustand tritt auf, wenn eine Übertragung abgeschlossen ist (es wird nicht wiederholt), aber nicht vollständig erfolgreich war. Alle Dateien müssen übertragen werden, um erfolgreich zu sein; wenn der Auftrag dauerhaft fehlgeschlagen ist, tritt ein Fehler auf. In der Regel rufen Sie "Abbrechen" oder "Abgeschlossen" auf, um den Auftrag in einen endgültigen Zustand zu verschieben. Der praktische Unterschied besteht darin, dass beim Aufrufen von "Abbrechen" alle erfolgreich übertragenen Dateien gelöscht werden, aber wenn Sie "Complete" aufrufen, werden alle erfolgreich übertragenen Dateien nicht gelöscht.
Gründe für das Auftreten eines FEHLERzustands sind:
- Bleiben Sie zu lang in einem TRANSIENT ERROR-Zustand (über die Einstellung NoProgressTimeout hinaus).
- Abrufen eines BG_E_TOKEN_REQUIRED Fehlers und Benötigen von Hilfe zu Hilfstoken
Es ist üblich, einen FEHLERauftrag neu zu konfigurieren und dann "Resume" aufzurufen, um den Auftrag erneut zu versuchen. Ihre App muss beispielsweise den Remotenamen einer Datei über SetRemoteNameaktualisieren.
Der ÜBERTRAGEN Zustand erfolgt, wenn eine Übertragung abgeschlossen ist und erfolgreich war. Sie müssen "Complete" aufrufen, um den Auftrag abzuschließen; für Downloadaufträge sind die heruntergeladenen Dateien erst verfügbar, nachdem Sie "Abgeschlossen" aufgerufen haben. Die Ausnahme von dieser Regel sind Aufträge, bei denen es sich um die Hochleistungsaufträge handelt (und Sie sollten "Abgeschlossen" trotzdem aufrufen).
Endgültige Zustände
Sobald sich ein Auftrag in einem endgültigen Zustand befindet, können Sie keine der zustandsverändernden Methoden aufrufen. Der Auftrag wird BESTÄTIGT, nachdem Sie "Complete()" aufgerufen haben und alle abgeschlossenen heruntergeladenen Dateien verfügbar sind. Der Auftrag wird abgebrochen nachdem Sie Cancel() aufgerufen haben, und alle heruntergeladenen Dateien werden gelöscht.
Lebenszyklus eines BITS-Auftrags
Der Lebenszyklus eines BITS-Auftrags beginnt beim Erstellen eines Auftrags. Ein Auftrag ist ein Container, der eine oder mehrere zu übertragende Dateien enthält. Ein Auftrag verfügt auch über Eigenschaften, die angeben, wie BITS die Dateien überträgt und mit Ihrer Anwendung interagiert. Sie können z. B. die Priorität des Auftrags angeben, unabhängig davon, ob es sich bei dem Auftrag um einen Upload- oder Downloadauftrag handelt und für welche Ereignisse Benachrichtigungen empfangen werden sollen.
Nachdem Sie den Auftrag erstellt haben, fügen Sie dem Auftrag mindestens eine Datei hinzu (Uploadaufträge können nur eine Datei enthalten), und ändern Sie alle Eigenschaftswerte entsprechend ihrer Anwendung. Wenn Sie dem Auftrag eine Datei hinzufügen, geben Sie sowohl den lokalen (Client) als auch den Remotenamen (Server) der Datei an. Der Remotedateiname muss das HTTP-, HTTPS- oder SMB-Protokoll verwenden. Dateien innerhalb eines Auftrags werden sequenziell verarbeitet (zuerst in, first out).
BITS hält Aufträge automatisch an, wenn sie erstellt werden. Sie müssen den Auftrag fortsetzen, um ihn in der Übertragungswarteschlange zu aktivieren. Sie können einen Auftrag jederzeit anhalten oder fortsetzen. Durch das Fortsetzen des Auftrags wird der Auftrag aus dem angehaltenen Zustand in den Warteschlangenzustand verschoben. Der Auftrag verbleibt im Zustand der Warteschlange, bis der Zeitplaner feststellt, dass es sich um die Aufgabe zum Übertragen von Dateien handelt. Alle Vordergrundaufträge werden gleichzeitig mit einem Hintergrundauftrag ausgeführt. BITS verarbeitet die Dateien in Vordergrundaufträgen fortlaufend.
Wenn es sich um die Übertragung von Dateien handelt, wechselt der Auftrag in den Verbindungszustand, während BITS eine Verbindung mit dem Remoteserver herstellt (im Namen der Remotedatei angegeben). Wenn BITS eine Verbindung mit dem Remoteserver herstellen kann, wechselt der Auftrag in den Übertragungszustand, in dem er verbleibt, bis das Zeitsegment endet, die Übertragung abgeschlossen ist, ein Fehler auftritt oder die Anwendung den Auftrag anhält.
Der Auftrag wird zwischen der Warteschlange, dem Herstellen einer Verbindung und dem Übertragen von Zuständen verschoben, bis BITS alle Dateien im Auftrag überträgt. Zu diesem Zeitpunkt wechselt der Auftrag in den übertragenen Zustand. BITS verwendet die Roundrobin-Planung, um Aufträge zu planen, die sich auf derselben Prioritätsebene befinden. Jeder Auftrag erhält einen Zeitschnitt, um seine Dateien zu verarbeiten. Wenn der Auftrag während des Zeitsegments nicht abgeschlossen wird, wechselt der Auftrag zurück zum Status der Warteschlange, und der nächste Auftrag in der Warteschlange wird aktiviert. Dadurch wird verhindert, dass große Aufträge kleinere Aufträge blockieren. Arbeitsplätze werden größtenteils zuerst in der FIFO-Basis (First Out) verarbeitet; BITS kann jedoch aufgrund von Roundrobin-Terminplanung, Auftragsfehlern und Dienstneustarts keine FIFO-Verarbeitung garantieren.
Die übertragenen Dateien sind erst für den Client verfügbar, wenn die Anwendung den IBackgroundCopyJob::Complete Methode aufruft, um den Besitz der Dateien von BITS an den Benutzer zu übertragen. Uploadaufträge werden auch auf den übertragenen Zustand festgelegt, wenn die Datei erfolgreich vom Server empfangen wird. Uploadantwortaufträge werden auf den übertragenen Zustand festgelegt, nachdem die Datei erfolgreich an den Server gesendet wurde und die Antwort von der Serveranwendung erfolgreich an den Client übertragen wird.
Wenn ein Fehler auftritt, wechselt der Auftrag entweder zum schwerwiegenden oder vorübergehenden Fehlerzustand. Schwerwiegende Fehler sind Fehler, von denen BITS nicht wiederhergestellt werden kann oder für die ein Eingreifen erforderlich ist. Wenn die Anwendung den Fehler beheben kann, setzt die Anwendung den Auftrag fort, und BITS verschiebt den Auftrag in den Warteschlangenzustand. Vorübergehende Fehler sind Fehler, die sich selbst beheben können. BITS-Wiederholungsaufträge im vorübergehenden Fehlerzustand, bis die Übertragung erfolgreich ist oder der Auftrag zeitüberschreitung. Die Zeitüberschreitung des Auftrags, wenn innerhalb eines anwendungsspezifischen Zeitraums keine Fortschritte erzielt werden. Wenn der Auftrag ausläuft, verschiebt BITS den Auftrag in den schwerwiegenden Fehlerzustand.
Weitere Informationen zu Auftragszuständen finden Sie unter BG_JOB_STATE.