Put Page

Der Put Page-Vorgang schreibt einen Bereich von Seiten in ein Seitenblob.

Anforderung

Sie können die Put Page Anforderung wie folgt erstellen. Es wird empfohlen, HTTPS zu verwenden. Ersetzen Sie myaccount durch den Namen Ihres Speicherkontos:

PUT-Methodenanforderungs-URI HTTP-Version
https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page HTTP/1.1

Emulierte Speicherdienstanforderung

Wenn Sie eine Anforderung an den emulierten Speicherdienst stellen, geben Sie den Emulatorhostnamen und den Blobdienstport als 127.0.0.1:10000an, gefolgt vom Namen des emulierten Speicherkontos:

PUT-Methodenanforderungs-URI HTTP-Version
http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob?comp=page HTTP/1.1

Weitere Informationen finden Sie unter Verwenden des Azurite-Emulators für lokale Azure Storage-Entwicklung.

URI-Parameter

Sie können im Anforderungs-URI die folgenden zusätzlichen Parameter angeben:

Parameter BESCHREIBUNG
timeout Optional. Der timeout-Parameter wird in Sekunden angegeben. Weitere Informationen finden Sie unter Festlegen von Timeouts für Blobdienstvorgänge.

Anforderungsheader

Die erforderlichen und optionalen Anforderungsheader werden in der folgenden Tabelle beschrieben:

Anforderungsheader BESCHREIBUNG
Authorization Erforderlich. Gibt das Autorisierungsschema, den Kontonamen und die Signatur an. Weitere Informationen finden Sie unter Autorisieren von Anforderungen an Azure Storage.
Date oder x-ms-date Erforderlich. Gibt die koordinierte Weltzeit (Coordinated Universal Time, UTC) für die Anforderung an. Weitere Informationen finden Sie unter Autorisieren von Anforderungen an Azure Storage.
x-ms-version Erforderlich für alle autorisierten Anforderungen. Gibt die Version des für die Anforderung zu verwendenden Vorgangs an. Weitere Informationen finden Sie unter Versionsverwaltung für die Azure-Speicherdienste.
Range Entweder Range oder x-ms-range ist erforderlich.

Gibt den Bereich von Bytes an, der als Seite geschrieben werden soll. Sowohl der Anfang als auch das Ende des Bereichs müssen angegeben werden. Dieser Header wird durch die HTTP/1.1-Protokollspezifikation definiert.

Bei einem Seitenaktualisierungsvorgang kann der Seitenbereich bis zu 4 MiB sein. Bei einem Seitenlöschvorgang kann der Seitenbereich so groß sein wie der Wert der vollständigen Größe des Blobs.

Da Seiten an 512-Byte-Grenzen ausgerichtet sein müssen, muss der Startoffset ein Modulus von 512 und der Endoffset ein Modulus von 512 –1 sein. Beispiele für gültige Bytebereiche sind 0-511, 512-1023 usw.

Blob Storage akzeptiert nur einen einzelnen Bytebereich für den Range Header, und der Bytebereich muss im folgenden Format angegeben werden: bytes=startByte-endByte.

Wenn Range und x-ms-range angegeben werden, verwendet der Dienst den Wert x-ms-range. Weitere Informationen finden Sie unter Angeben des Bereichsheaders für Blobdienstvorgänge.
x-ms-range Entweder Range oder x-ms-range ist erforderlich.

Gibt den Bereich von Bytes an, der als Seite geschrieben werden soll. Sowohl der Anfang als auch das Ende des Bereichs müssen angegeben werden. Dieser Header wird durch die HTTP/1.1-Protokollspezifikation definiert.

Bei einem Seitenaktualisierungsvorgang kann der Seitenbereich bis zu 4 MiB groß sein. Für einen Seitenlöschvorgang kann die Größe des Seitenbereichs dem Wert der Gesamtgröße des BLOB entsprechen.

Da Seiten an 512-Byte-Grenzen ausgerichtet werden müssen, muss der Startoffset ein Modulus von 512 und der Endoffset ein Modul von 512 – 1 sein. Beispiele für gültige Bytebereiche sind 0-511, 512-1023 usw.

Blob Storage akzeptiert nur einen einzelnen Bytebereich für den x-ms-range Header, und der Bytebereich muss im folgenden Format angegeben werden: bytes=startByte-endByte.

Wenn Range und x-ms-range angegeben werden, verwendet der Dienst den Wert x-ms-range. Weitere Informationen finden Sie unter Angeben des Bereichsheaders für Blobdienstvorgänge .
Content-Length Erforderlich. Gibt die Anzahl der Bytes an, die im Anforderungstext übertragen werden. Wenn der x-ms-page-write Header auf clearfestgelegt ist, muss der Wert dieses Headers auf 0festgelegt werden.
Content-MD5 Optional. Ein MD5-Hash des Seiteninhalts. Mithilfe des Hash wird die Integrität der Seite während der Übertragung überprüft. Bei Angabe dieses Headers vergleicht der Speicherdienst den Hash des eingegangenen Inhalts mit diesem Headerwert.
<br / >Hinweis: Dieser MD5-Hash wird nicht im Blob gespeichert.

Wenn die beiden Hashs nicht übereinstimmen, schlägt der Vorgang mit Fehlercode 400 (Ungültige Anforderung) fehl.
x-ms-content-crc64 Optional. Ein CRC64-Hash des Seiteninhalts. Mithilfe des Hash wird die Integrität der Seite während der Übertragung überprüft. Bei Angabe dieses Headers vergleicht der Speicherdienst den Hash des eingegangenen Inhalts mit diesem Headerwert.

Hinweis: Dieser CRC64-Hash wird nicht im Blob gespeichert.

Wenn die beiden Hashs nicht übereinstimmen, schlägt der Vorgang mit Fehlercode 400 (Ungültige Anforderung) fehl.

Wenn sowohl der -Header als x-ms-content-crc64 auch der Content-MD5 -Header vorhanden sind, schlägt die Anforderung mit einer 400 (ungültige Anforderung) fehl.

Dieser Header wird in Version 2019-02-02 und höher unterstützt.
x-ms-page-write: {update ¦ clear} Erforderlich. Sie können eine der folgenden Optionen angeben:

- Update: Schreibt die vom Anforderungstext angegebenen Bytes in den angegebenen Bereich. Der Range-Header und der Content-Length-Header müssen übereinstimmen, damit das Update ausgeführt werden kann.
- Clear: Löscht den angegebenen Bereich und gibt den Speicherplatz frei, der im Speicher für diesen Bereich verwendet wird. Um einen Bereich zu löschen, legen Sie den Content-Length Header auf 0fest, und legen Sie den Range Header auf einen Wert fest, der den zu löschenden Bereich bis zur maximalen Blobgröße angibt.
x-ms-encryption-scope Optional. Gibt den Verschlüsselungsbereich an, der zum Verschlüsseln des Anforderungsinhalts verwendet werden soll. Dieser Header wird in Version 2019-02-02 und höher unterstützt.
x-ms-lease-id:<ID> Erforderlich, wenn das BLOB über eine aktive Lease verfügt. Um diesen Vorgang für ein BLOB mit einer aktiven Lease auszuführen, geben Sie die gültige Lease-ID für diesen Header an.
x-ms-if-sequence-number-le: <num> Optional. Wenn die Sequenznummer des Blobs kleiner oder gleich dem angegebenen Wert ist, wird die Anforderung fortgesetzt. Andernfalls tritt der SequenceNumberConditionNotMet-Fehler (HTTP-status Code 412 – Vorbedingung fehlgeschlagen) auf.
x-ms-if-sequence-number-lt: <num> Optional. Wenn die Sequenznummer des Blobs kleiner als der angegebene Wert ist, wird die Anforderung fortgesetzt. Andernfalls schlägt der Fehler SequenceNumberConditionNotMet fehl (HTTP-status Code 412 – Vorbedingungsfehler).
x-ms-if-sequence-number-eq: <num> Optional. Wenn die Sequenznummer des Blobs dem angegebenen Wert entspricht, wird die Anforderung fortgesetzt. Andernfalls schlägt der Fehler SequenceNumberConditionNotMet fehl (HTTP-status Code 412 – Vorbedingungsfehler).
If-Modified-Since Optional. Ein DateTime-Wert. Geben Sie diesen bedingten Header an, um die Seite nur dann zu schreiben, wenn das BLOB seit dem angegebenen Datum bzw. der angegebenen Uhrzeit geändert wurde. Wenn das Blob nicht geändert wurde, gibt Blob Storage status Code 412 (Fehler bei der Vorbedingung) zurück.
If-Unmodified-Since Optional. Ein DateTime-Wert. Geben Sie diesen bedingten Header an, um die Seite nur zu schreiben, wenn das Blob seit dem angegebenen Datum/der angegebenen Uhrzeit nicht geändert wurde. Wenn das Blob geändert wurde, gibt Blob Storage status Code 412 (Vorbedingung fehlgeschlagen) zurück.
If-Match Optional. Ein ETag-Wert. Geben Sie einen ETag-Wert für diesen bedingten Header an, um die Seite nur dann zu schreiben, wenn der ETag-Wert des BLOB dem angegebenen Wert entspricht. Wenn die Werte nicht übereinstimmen, gibt Blob Storage status Code 412 (Vorbedingung fehlgeschlagen) zurück.
If-None-Match Optional. Ein ETag-Wert.

Geben Sie einen ETag-Wert für diesen bedingten Header an, um die Seite nur zu schreiben, wenn der ETag-Wert des Blobs nicht mit dem angegebenen Wert übereinstimmt. Wenn die Werte identisch sind, gibt Blob Storage status Code 412 (Vorbedingung fehlgeschlagen) zurück.
x-ms-client-request-id Optional. Stellt einen vom Client generierten, undurchsichtigen Wert mit einem Zeichenlimit von 1 Kibibyte (KiB) bereit, der beim Konfigurieren der Protokollierung in den Protokollen aufgezeichnet wird. Es wird dringend empfohlen, diesen Header zu verwenden, um clientseitige Aktivitäten mit Anforderungen zu korrelieren, die der Server empfängt. Weitere Informationen finden Sie unter Überwachen Azure Blob Storage.

Dieser Vorgang unterstützt zudem die Verwendung von bedingten Headern zum Ausführen des Vorgangs, wobei eine bestimmte Bedingung erfüllt sein muss. Weitere Informationen finden Sie unter Angeben von bedingten Headern für Blobdienstvorgänge.

Anforderungsheader (vom Kunden bereitgestellte Verschlüsselungsschlüssel)

Ab Version 2019-02-02 können Sie die folgenden Header für die Anforderung angeben, ein Blob mit einem vom Kunden bereitgestellten Schlüssel zu verschlüsseln. Die Verschlüsselung mit einem vom Kunden bereitgestellten Schlüssel (und der entsprechenden Gruppe von Headern) ist optional.

Anforderungsheader BESCHREIBUNG
x-ms-encryption-key Erforderlich. Der Base64-codierte AES-256-Verschlüsselungsschlüssel.
x-ms-encryption-key-sha256 Erforderlich. Der Base64-codierte SHA256-Hash des Verschlüsselungsschlüssels.
x-ms-encryption-algorithm: AES256 Erforderlich. Gibt den Algorithmus an, der für die Verschlüsselung verwendet werden soll. Der Wert dieses Headers muss auf AES256 festgelegt sein.

Anforderungstext

Der Anforderungstext enthält den Inhalt der Seite.

Beispielanforderung: Bytebereich aktualisieren

  
Request Syntax:  
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page HTTP/1.1  
  
Request Headers:  
x-ms-page-write: update  
x-ms-date: Fri, 16 Sep 2011 22:15:50 GMT  
x-ms-version: 2011-08-18  
x-ms-range: bytes=0-65535  
Authorization: SharedKey myaccount:4KdWDiTdA9HmIF9+WF/8WfYOpUrFhieGIT7f0av+GEI=  
Content-Length: 65536  
  

Beispielanforderung: Bytebereich löschen

  
Request Syntax:  
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page HTTP/1.1  
  
Request Headers:  
Range: bytes=1024-2048  
x-ms-page-write: clear  
x-ms-date: Sun, 25 Sep 2011 23:37:35 GMT  
x-ms-version: 2011-08-18  
Authorization: SharedKey myaccount:4KdWDiTdA9HmIF9+WF/8WfYOpUrFhieGIT7f0av+GEI=  
  

Antwort

Die Antwort enthält den HTTP-Statuscode und einen Satz von Antwortheadern.

Statuscode

Bei einem erfolgreichen Vorgang wird der Statuscode 201 (Erstellt) zurückgegeben.

Weitere Informationen zu status Codes finden Sie unter Status- und Fehlercodes.

Antwortheader

Die Antwort für diesen Vorgang umfasst die folgenden Header. Die Antwort kann außerdem weitere HTTP-Standardheader enthalten. Alle Standardheader entsprechen der HTTP/1.1-Protokollspezifikation.

Syntax BESCHREIBUNG
ETag Das ETag für das BLOB. Wenn die Anforderungsversion 2011-08-18 und höher ist, wird der ETag-Wert in Anführungszeichen eingeschlossen. Das ETag kann verwendet werden, um einen bedingten Put Page-Vorgang auszuführen, indem sein Wert für den If-Match-Anforderungsheader oder den If-None-Match-Anforderungsheader angegeben wird.
Last-Modified Das Datum und die Uhrzeit der letzten Änderung des Blobs. Das Datumsformat entspricht RFC 1123. Weitere Informationen finden Sie unter Darstellen von Datums-/Uhrzeitwerten in Headern.

Bei jedem Schreibvorgang für das BLOB, einschließlich von Updates der Metadaten oder Eigenschaften des BLOB oder Eigenschaften, wird der Zeitpunkt der letzten Änderung des BLOB geändert.
Content-MD5 Dieser Header wird zurückgegeben, damit der Client die Integrität des Nachrichteninhalts überprüfen kann. Der Wert dieses Headers wird von Blob Storage berechnet. Er entspricht nicht unbedingt dem Wert, der in den Anforderungsheadern angegeben wird. Ab Version 2019-02-02 wird dieser Header nur zurückgegeben, wenn die Anforderung über diesen Header verfügt.
x-ms-content-crc64 Ab Version 2019-02-02 wird dieser Header zurückgegeben, damit der Client die Integrität des Nachrichteninhalts überprüfen kann. Der Wert dieses Headers wird von Blob Storage berechnet. Er entspricht nicht unbedingt dem Wert, der in den Anforderungsheadern angegeben wird.

Dieser Header wird zurückgegeben, wenn Content-MD5 der Header in der Anforderung nicht vorhanden ist.
x-ms-blob-sequence-number Die aktuelle Sequenznummer für das Seitenblob.
x-ms-request-id Identifiziert eindeutig die Anforderung, die gestellt wurde, und kann zur Problembehandlung für die Anforderung verwendet werden. Weitere Informationen finden Sie unter Problembehandlung bei API-Vorgängen.
x-ms-version Gibt die Blobdienstversion an, die zum Ausführen der Anforderung verwendet wurde. Dieser Header wird für Anforderungen zurückgegeben, die für Version 2009-09-19 und höher vorgenommen wurden.
Date Ein UTC-Datums-/Uhrzeitwert, der vom Dienst generiert wird, der die Uhrzeit angibt, zu der die Antwort initiiert wurde.
x-ms-request-server-encrypted: true/false Version 2015-12-11 und höher. Der Wert dieses Headers wird auf true festgelegt, wenn der Inhalt der Anforderung mithilfe des angegebenen Algorithmus erfolgreich verschlüsselt wurde. Andernfalls wird der Wert auf false festgelegt.
x-ms-encryption-key-sha256 Version 2019-02-02 und höher. Wird zurückgegeben, wenn die Anforderung einen vom Kunden bereitgestellten Schlüssel für die Verschlüsselung verwendet hat, sodass der Client sicherstellen kann, dass der Inhalt der Anforderung mithilfe des bereitgestellten Schlüssels erfolgreich verschlüsselt wurde.
x-ms-encryption-scope Version 2019-02-02 und höher. Wird zurückgegeben, wenn die Anforderung einen Verschlüsselungsbereich verwendet hat, sodass der Client sicherstellen kann, dass der Inhalt der Anforderung mithilfe des Verschlüsselungsbereichs erfolgreich verschlüsselt wurde.
x-ms-client-request-id Kann verwendet werden, um Anforderungen und entsprechende Antworten zu behandeln. Der Wert dieses Headers ist gleich dem Wert des x-ms-client-request-id Headers, wenn er in der Anforderung vorhanden ist und der Wert nicht mehr als 1.024 sichtbare ASCII-Zeichen enthält. Wenn der x-ms-client-request-id Header in der Anforderung nicht vorhanden ist, ist er in der Antwort nicht vorhanden.

Antworttext

Keine.

Beispiel für eine Antwort

Response Status:  
HTTP/1.1 201 Created  
  
Response Headers:  
x-ms-content-crc64: 77uWZTolTHU  
Date: Sun, 25 Sep 2011 22:33:35 GMT  
ETag: "0x8CB171BA9E94B0B"  
Last-Modified: Sun, 25 Sep 2011 12:13:31 GMT  
x-ms-version: 2011-08-18  
x-ms-blob-sequence-number: 0  
Content-Length: 0  
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0  
  

Authorization

Beim Aufrufen eines Datenzugriffsvorgangs in Azure Storage ist eine Autorisierung erforderlich. Sie können den Put Page Vorgang wie unten beschrieben autorisieren.

Azure Storage unterstützt die Verwendung von Microsoft Entra ID zum Autorisieren von Anforderungen an Blobdaten. Mit Microsoft Entra ID können Sie die rollenbasierte Zugriffssteuerung (Azure RBAC) von Azure verwenden, um einem Sicherheitsprinzipal Berechtigungen zu erteilen. Der Sicherheitsprinzipal kann ein Benutzer, eine Gruppe, ein Anwendungsdienstprinzipal oder eine verwaltete Azure-Identität sein. Der Sicherheitsprinzipal wird von Microsoft Entra ID authentifiziert, um ein OAuth 2.0-Token zurückzugeben. Das Token kann anschließend zum Autorisieren einer Anforderung an den Blob-Dienst verwendet werden.

Weitere Informationen zur Autorisierung mit Microsoft Entra ID finden Sie unter Autorisieren des Zugriffs auf Blobs mit Microsoft Entra ID.

Berechtigungen

Im Folgenden sind die RBAC-Aktion aufgeführt, die für einen Microsoft Entra Benutzer, Eine Gruppe oder einen Dienstprinzipal erforderlich ist, um den Put Page Vorgang aufzurufen, und die integrierte Azure RBAC-Rolle mit den geringsten Berechtigungen, die diese Aktion enthält:

Weitere Informationen zum Zuweisen von Rollen mithilfe von Azure RBAC finden Sie unter Zuweisen einer Azure-Rolle für den Zugriff auf Blobdaten.

Hinweise

Der Put Page-Vorgang schreibt einen Bereich von Seiten in ein Seitenblob. Dieser Vorgang kann nur für ein vorhandenes Seitenblob aufgerufen werden. Es kann nicht aufgerufen werden, um ein neues Seitenblob zu erstellen, und es kann auch nicht für ein Blockblob aufgerufen werden. Der Aufruf Put Page mit einem blob-Namen, der derzeit nicht vorhanden ist, gibt HTTP-status Code 404 (Nicht gefunden) zurück.

Um ein neues Seitenblob zu erstellen, rufen Sie Put Blob auf, und geben Sie den Typ des Zu erstellenden Blobs als Seitenblob an. Ein Seitenblob kann bis zu 8 TiB groß sein.

Wenn das Blob über eine aktive Lease verfügt, muss der Client eine gültige Lease-ID für die Anforderung angeben, um eine Seite zu schreiben.

Seitenaktualisierungsvorgänge

Wenn Put Page mit der Option Update aufgerufen wird, wird ein direkter Schreibvorgang in das angegebene Seitenblob ausgeführt. Sämtlicher Inhalt der angegebenen Seite wird durch das Update überschrieben.

Wichtig

Wenn für den Server ein Timeout auftritt oder die Verbindung während eines Vorgangs Put Page geschlossen wird, wurde die Seite möglicherweise aktualisiert oder nicht. Daher sollten Sie das Update so lange wiederholen, bis Sie eine Antwort erhalten, die den Erfolg anzeigt.

Jeder Seitenbereich, der mit Put Page für einen Aktualisierungsvorgang übermittelt wird, kann bis zu 4 MiB groß sein. Der Start- und Endbereich der Seite muss an 512-Bytes-Begrenzungen ausgerichtet werden. Wenn Sie versuchen, einen Seitenbereich hochzuladen, der größer als 4 MiB ist, gibt der Dienst status Code 413 (Anforderungsentität zu groß) zurück.

Vorgänge zum Löschen von Seiten

Der Aufruf Put Page mit der Clear Option gibt den Speicherplatz frei, der von der angegebenen Seite verwendet wird. Seiten, die gelöscht wurden, werden nicht mehr als Teil des Seitenblobs nachverfolgt.

Für seiten, die gelöscht wurden, fallen keine Gebühren mehr für das Speicherkonto an, da ihre Speicherressourcen freigegeben wurden. Die einzige Ausnahme ist, wenn Momentaufnahmen des Seitenblobs vorhanden sind. Für Seiten in Momentaufnahmen fallen Gebühren an, wenn diese Seiten nicht mehr als Teil des Quellblobs vorhanden sind.

Verwalten von Parallelitätsproblemen

Blob Storage verarbeitet gleichzeitige Schreibvorgänge auf überlappende Seiten sequenziell. Das heißt, die letzte Seite, die vom Dienst verarbeitet wird, bestimmt den Inhalt des Blobs. Um die Integrität des Blobinhalts sicherzustellen, sollte der Client Daher Schreibvorgänge auf überlappende Seiten mithilfe eines oder mehrerer der folgenden Ansätze verarbeiten:

  • Sie können den Wert des Last-Modified-Antwortheaders für jeden erfolgreichen Aufruf von Put Page überprüfen. Die Reihenfolge der von Blob Storage zurückgegebenen Antworten entspricht nicht unbedingt der Reihenfolge, in der sie vom Dienst ausgeführt wurden. Der Wert von Last-Modified gibt jedoch immer die Reihenfolge an, in der die Anforderungen vom Dienst verarbeitet wurden.

  • Sie können Updates bedingt auf der Grundlage des ETags des BLOB oder des letzten Änderungszeitpunkts mit vollständiger Parallelität ausführen. Dieser Ansatz empfiehlt sich insbesondere dann, wenn die Anzahl gleichzeitiger Schreibvorgänge relativ gering ist. Verwenden Sie zu diesem Zweck die bedingten Anforderungsheader If-Match, If-None-Match, If-Modified-Since und If-Unmodified-Since.

  • Sie können Lease Blob aufrufen, um das Blob für einen Zeitraum von einer Minute oder länger für andere Schreibvorgänge zu sperren, wenn die Lease verlängert wird.

  • Sie können die Sequenznummer des Blobs verwenden, um sicherzustellen, dass das wiederholen einer Anforderung, für die keine Antwort vorhanden ist, nicht zu gleichzeitigen Updates führt. Dieser Ansatz eignet sich möglicherweise am besten für Clients, die einen hohen Durchsatz für Seitenschreibvorgänge benötigen. Dies wird im folgenden Abschnitt ausführlich beschrieben.

Verwenden der Seitenblobsequenznummer für Wiederholungsanforderungen

Wenn bei einem Aufruf von Put Page ein Zeitüberschreitungsausfall oder keine Antwort zurückgegeben wird, gibt es keine Möglichkeit, sicher zu wissen, ob die Anforderung erfolgreich war. Daher müssen Sie die Anforderung erneut versuchen. Aufgrund der verteilten Art der Azure-Speicherdienste ist es jedoch möglich, dass die ursprüngliche Anforderung verarbeitet wird, nachdem die wiederholte Anforderung erfolgreich war. Die verzögerte ursprüngliche Anforderung kann andere Updates überschreiben und somit zu unerwarteten Ergebnissen führen. Die folgende Sequenz veranschaulicht, wie dies geschehen kann:

  1. Eine Put Page Anforderung zum Schreiben des Werts "X" auf Seite 0 gibt ein Zeitüberschreitungsüberschreitung oder keine Antwort zurück.

  2. Eine wiederholte Anforderung zum Schreiben von Wert "X" in Seite 0 wird erfolgreich abgeschlossen.

  3. Eine Anforderung zum Schreiben von Wert "Y" in Seite 0 wird erfolgreich abgeschlossen.

  4. Die ursprüngliche Anforderung war erfolgreich, und Wert "x" wird in Seite 0 geschrieben.

  5. Beim Lesen von Seite 0 wird Wert "X" zurückgegeben, während der Client an diesem Punkt Wert "Y" erwartet.

Diese Art von Konflikt kann auftreten, wenn die ursprüngliche Anforderung keinen status Code von 100 bis 499 oder 503 (Server ausgelastet) zurückgibt. Wird einer dieser Statuscodes zurückgegeben, können Sie sicher sein, dass die Anforderung erfolgreich abgeschlossen wurde oder fehlgeschlagen ist. Wenn der Dienst jedoch einen Statuscode außerhalb dieses Bereichs zurückgibt, kann der Status der ursprünglichen Anforderung nicht bestimmt werden.

Um diese Art von Konflikt zu vermeiden, können Sie die Sequenznummer des Seitenblobs verwenden, um sicherzustellen, dass die ursprüngliche Anforderung nicht erfolgreich ist, wenn Sie eine Anforderung wiederholen. Dazu sollten Sie die Sequenznummer vor dem Wiederholen der ursprünglichen Anforderung inkrementieren. Anschließend können Sie die Header für bedingte Sequenznummern verwenden, um sicherzustellen, dass die Anforderung fehlschlägt, wenn die Sequenznummer nicht mit der erwarteten Sequenznummer übereinstimmt. Die folgende Sequenz veranschaulicht diese Vorgehensweise:

  1. Der Client erstellt ein Seitenblob mit Put Blob und legt seine Sequenznummer auf fest 0.

  2. Eine Put Page Anforderung zum Schreiben des Werts "X" auf Seite 0, wobei der if-sequence-number-lt Header auf 1 "Timesout" festgelegt ist oder keine Antwort zurückgibt.

  3. Der Client ruft auf Set Blob Properties , um die Sequenznummer in zu aktualisieren 1.

  4. Eine wiederholungsanforderung zum Schreiben des Werts "X" auf Seite 0, wobei if-sequence-number-lt auf 2 "erfolgreich" festgelegt ist.

  5. Eine Anforderung zum Schreiben des Werts "Y" auf Seite 0, wobei if-sequence-number-lt auf 2 "erfolgreich" festgelegt ist.

  6. Die ursprüngliche Anforderung wird schließlich verarbeitet, schlägt jedoch fehl, da sie die Bedingung angibt, dass die Sequenznummer kleiner als 1 sein muss (d. a. der if-sequence-num-lt Header ist auf 1festgelegt). Als Fehler wird SequenceNumberConditionNotMet (HTTP-Statuscode 412 - Vorbedingung nicht erfüllt) zurückgegeben.

  7. Beim Lesen von Seite 0 wird der erwartete Wert "Y" zurückgegeben.

Weitere Informationen

Autorisieren von Anforderungen an Azure Storage
Status- und Fehlercodes
Festlegen von Timeouts für Blobdienstvorgänge