Lezen in het Engels

Delen via


Sessietokenindelingen converteren in .NET SDK

VAN TOEPASSING OP: NoSQL

In dit artikel wordt uitgelegd hoe u converteert tussen verschillende sessietokenindelingen om compatibiliteit tussen SDK-versies te garanderen.

Notitie

Standaard houdt de SDK het sessietoken automatisch bij en wordt het meest recente sessietoken gebruikt. Ga voor meer informatie naar Sessietokens gebruiken. De instructies in dit artikel zijn alleen van toepassing met de volgende voorwaarden:

  • Uw Azure Cosmos DB-account maakt gebruik van sessieconsistentie.
  • U beheert de sessietokens handmatig.
  • U gebruikt tegelijkertijd meerdere versies van de SDK.

Indelingen van sessietoken

Er zijn twee sessietokenindelingen: eenvoudig en vector. Deze twee indelingen zijn niet uitwisselbaar, dus de indeling moet worden geconverteerd bij het doorgeven aan de clienttoepassing met verschillende versies.

  • De eenvoudige sessietokenindeling wordt gebruikt door de .NET SDK V1 (Microsoft.Azure.DocumentDB -versie 1.x)
  • De vectorsessietokenindeling wordt gebruikt door de .NET SDK V2 (Microsoft.Azure.DocumentDB -versie 2.x)

Eenvoudig sessietoken

Een eenvoudig sessietoken heeft deze indeling: {pkrangeid}:{globalLSN}

Vectorsessietoken

Een vectorsessietoken heeft de volgende indeling: {pkrangeid}:{Version}#{GlobalLSN}#{RegionId1}={LocalLsn1}#{RegionId2}={LocalLsn2}....#{RegionIdN}={LocalLsnN}

Converteren naar eenvoudig sessietoken

Als u een sessietoken wilt doorgeven aan de client met .NET SDK V1, gebruikt u een eenvoudige sessietokenindeling. Gebruik bijvoorbeeld de volgende voorbeeldcode om deze te converteren.

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

Converteren naar vectorsessietoken

Als u een sessietoken wilt doorgeven aan client met .NET SDK V2, gebruikt u de indeling van het vectorsessietoken . Gebruik bijvoorbeeld de volgende voorbeeldcode om deze te converteren.

C#

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

Volgende stappen

Lees de volgende artikelen: