.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;
}
次のステップ
次の記事を参照してください。