次の方法で共有


RequestOptions.SessionToken プロパティ

定義

Azure Cosmos DB サービスのセッション整合性で使用するトークンを取得または設定します。

public string SessionToken { get; set; }
member this.SessionToken : string with get, set
Public Property SessionToken As String

プロパティ値

セッション整合性で使用するトークン。

この例では、 から ResourceResponse<TResource> SessionToken を取得し、 内RequestOptionsの別のDocumentClientインスタンスで使用する方法を示します。この例では、クライアントの各インスタンスが異なる AppDomain 内のコード (複数のノード Web アプリケーションの場合は異なるノードなど) から実行されていることを前提としています

string sessionToken;
string docSelfLink;

using (DocumentClient client = new DocumentClient(new Uri(""), ""))
{
    ResourceResponse<Document> response = client.CreateDocumentAsync(collection.SelfLink, new { id = "an id", value = "some value" }).Result;
    sessionToken = response.SessionToken;
    Document created = response.Resource;
    docSelfLink = created.SelfLink;
}

using (DocumentClient client = new DocumentClient(new Uri(""), ""))
{
    ResourceResponse<Document> read = client.ReadDocumentAsync(docSelfLink, new RequestOptions { SessionToken = sessionToken }).Result;
}

注釈

ConsistencyLevel Azure Cosmos DB の 1 つはセッションです。 実際、これはアカウントに適用される既定のレベルです。

セッションの整合性を使用すると、Azure Cosmos DB に対する新しい書き込み要求ごとに、新しい SessionToken が割り当てられます。 DocumentClient は、このトークンを読み取り/クエリ要求ごとに内部的に使用して、セットの整合性レベルが維持されるようにします。

一部のシナリオでは、このセッションを自分で管理する必要があります。複数のノードを持つ Web アプリケーションを検討します。各ノードに独自の DocumentClient インスタンスが含まれるとします。これらのノードを同じセッションに参加させる場合 (Web 層間で独自の書き込みを一貫して読み取ることができるようにする場合)、1 つのノードの書き込みアクションから ResourceResponse<TResource> SessionToken をクライアント層に送信する必要があります。 クッキーまたはその他のメカニズムを使用し、そのトークンが後続の読み取りのために Web 層に戻されるようにします。 Azure Load Balancer のように、要求間でセッション アフィニティを保持しないラウンドロビン ロード バランサーを使っている場合、読み取りが、セッションが作成された書き込み要求に対するものとは異なるノードに到達する可能性があります。

前に説明したように Azure Cosmos DB SessionToken をフローさせないと、一定の期間、一貫性のない読み取り結果が発生する可能性があります。

適用対象

こちらもご覧ください