.NET SDK でセッション トークン形式を変換する

適用対象: NoSQL

この記事では、SDK バージョン間での互換性を保証するために、異なるセッション トークン形式間で変換を行う方法について説明します。

注意

既定では、SDK はセッション トークンを自動的に追跡し、最新のセッション トークンを使用します。 詳細については、「セッション トークンを利用する」を参照してください。 この記事の手順は、次の条件に当てはまる場合にのみ適用されます。

  • Azure Cosmos DB アカウントでセッションの整合性が使用される。
  • セッション トークンを手動で管理している。
  • 複数のバージョンの SDK を同時に使用する。

セッション トークン形式

セッション トークン形式には、シンプルベクターの 2 つがあります。 これらの 2 つの形式は互換性がないため、バージョンが異なるクライアント アプリケーションに渡すときに形式を変換する必要があります。

  • シンプル セッション トークン形式は、.NET SDK V1 (Microsoft.Azure.DocumentDB バージョン 1.x) で使用されます。
  • ベクター セッション トークン形式は、.NET SDK V2 (Microsoft.Azure.DocumentDB バージョン 2.x) で使用されます。

シンプル セッション トークン

シンプル セッション トークンは次の形式です: {pkrangeid}:{globalLSN}

ベクター セッション トークン

ベクター セッション トークンは次の形式です: {pkrangeid}:{Version}#{GlobalLSN}#{RegionId1}={LocalLsn1}#{RegionId2}={LocalLsn2}....#{RegionIdN}={LocalLsnN}

シンプル セッション トークンに変換する

.NET SDK V1 を使用してセッション トークンをクライアントに渡すには、シンプル セッション トークン形式を使用します。 たとえば、次のサンプル コードを使用して変換します。

private static readonly char[] SegmentSeparator = (new[] { '#' });
private static readonly char[] PkRangeSeparator = (new[] { ':' });

// sessionTokenToConvert = session token from previous response
string[] items = sessionTokenToConvert.Split(PkRangeSeparator, StringSplitOptions.RemoveEmptyEntries);
string[] sessionTokenSegments = items[1].Split(SessionTokenHelpers.SegmentSeparator, StringSplitOptions.RemoveEmptyEntries);

string sessionTokenInSimpleFormat;

if (sessionTokenSegments.Length == 1)
{
    // returning the same token since it already has the correct format
    sessionTokenInSimpleFormat = sessionTokenToConvert;
}
else
{
    long version = 0;
    long globalLSN = 0;

    if (!long.TryParse(sessionTokenSegments[0], out version)
        || !long.TryParse(sessionTokenSegments[1], out globalLSN))
    {
        throw new ArgumentException("Invalid session token format", sessionTokenToConvert);
    }

    sessionTokenInSimpleFormat = string.Format("{0}:{1}", items[0], globalLSN);
}

ベクター セッション トークンに変換する

.NET SDK V2 を使用してセッション トークンをクライアントに渡すには、ベクター セッション トークン形式を使用します。 たとえば、次のサンプル コードを使用して変換します。


private static readonly char[] SegmentSeparator = (new[] { '#' });
private static readonly char[] PkRangeSeparator = (new[] { ':' });

// sessionTokenToConvert = session token from previous response
string[] items = sessionTokenToConvert.Split(PkRangeSeparator, StringSplitOptions.RemoveEmptyEntries);
string[] sessionTokenSegments = items[1].Split(SegmentSeparator, StringSplitOptions.RemoveEmptyEntries);

string sessionTokenInVectorFormat;

if (sessionTokenSegments.Length == 1)
{
    long globalLSN = 0;
    if (long.TryParse(sessionTokenSegments[0], out globalLSN))
    {
        sessionTokenInVectorFormat = string.Format("{0}:-2#{1}", items[0], globalLSN);
    }
    else
    {
        throw new ArgumentException("Invalid session token format", sessionTokenToConvert);
    }
}
else
{
    // returning the same token since it already has the correct format
    sessionTokenInVectorFormat = sessionTokenToConvert;
}

次のステップ

次の記事を参照してください。