Konvertera sessionstokenformat i ett .NET SDK

GÄLLER FÖR: NoSQL

Den här artikeln beskriver hur du konverterar mellan olika sessionstokenformat för att säkerställa kompatibilitet mellan SDK-versioner.

Kommentar

Som standard håller SDK automatiskt reda på sessionstoken och använder den senaste sessionstoken. Mer information finns i Använda sessionstoken. Anvisningarna i den här artikeln gäller endast med följande villkor:

  • Ditt Azure Cosmos DB-konto använder sessionskonsekvens.
  • Du hanterar sessionstoken manuellt.
  • Du använder flera versioner av SDK:et samtidigt.

Format för sessionstoken

Det finns två sessionstokenformat: enkel och vektor. Dessa två format är inte utbytbara, så formatet ska konverteras när det skickas till klientprogrammet med olika versioner.

  • Det enkla sessionstokenformatet används av .NET SDK V1 (Microsoft.Azure.DocumentDB -version 1.x)
  • Formatet för vektorsessionstoken används av .NET SDK V2 (Microsoft.Azure.DocumentDB -version 2.x)

Enkel sessionstoken

En enkel sessionstoken har följande format: {pkrangeid}:{globalLSN}

Vektorsessionstoken

En vektorsessionstoken har följande format: {pkrangeid}:{Version}#{GlobalLSN}#{RegionId1}={LocalLsn1}#{RegionId2}={LocalLsn2}....#{RegionIdN}={LocalLsnN}

Konvertera till enkel sessionstoken

Om du vill skicka en sessionstoken till klienten med hjälp av .NET SDK V1 använder du ett enkelt sessionstokenformat. Använd till exempel följande exempelkod för att konvertera den.

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);
}

Konvertera till vektorsessionstoken

Om du vill skicka en sessionstoken till klienten med hjälp av .NET SDK V2 använder du formatet för vektorsessionstoken. Använd till exempel följande exempelkod för att konvertera den.


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;
}

Nästa steg

Läs följande artiklar: