Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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: