Convertire i formati di token di sessione nel .NET SDK

Questo articolo illustra come eseguire la conversione tra formati di token di sessione diversi per garantire la compatibilità tra le versioni dell'SDK.

Annotazioni

Per impostazione predefinita, l'SDK tiene traccia del token di sessione automaticamente e usa il token di sessione più recente. Per altre informazioni, vedere Usare i token di sessione. Le istruzioni contenute in questo articolo si applicano solo alle condizioni seguenti:

  • L'account di Azure Cosmos DB utilizza la coerenza della sessione.
  • Si gestiscono manualmente i token di sessione.
  • Si usano più versioni dell'SDK contemporaneamente.

Formati di token di sessione

Esistono due formati di token di sessione: semplice e vettoriale. Questi due formati non sono intercambiabili, quindi il formato deve essere convertito quando si passa all'applicazione client con versioni diverse.

  • Il formato del token di sessione semplice viene usato da .NET SDK V1 (Microsoft.Azure.DocumentDB -version 1.x)
  • Il formato del token di sessione vettoriale viene usato da .NET SDK V2 (Microsoft.Azure.DocumentDB -version 2.x)

Token di sessione semplice

Un token di sessione semplice ha questo formato: {pkrangeid}:{globalLSN}

Token di sessione vettoriale

Un token di sessione vettoriale ha il formato seguente: {pkrangeid}:{Version}#{GlobalLSN}#{RegionId1}={LocalLsn1}#{RegionId2}={LocalLsn2}....#{RegionIdN}={LocalLsnN}

Eseguire la conversione in token di sessione semplice

Per passare un token di sessione al client usando .NET SDK V1, usare un formato di token di sessione semplice. Ad esempio, usare il codice di esempio seguente per convertirlo.

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

Convertire in token di sessione Vector

Per passare un token di sessione al client usando .NET SDK V2, usare il formato del token di sessione vettoriale . Ad esempio, usare il codice di esempio seguente per convertirlo.


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

Passaggi successivi

Leggere gli articoli seguenti: