Ler em inglês

Compartilhar via


Converter formatos de token de sessão no SDK do .NET

APLICA-SE A: NoSQL

Este artigo explica como converter entre diferentes formatos de token de sessão para garantir a compatibilidade entre as versões do SDK.

Observação

Por padrão, o SDK mantém o controle do token de sessão automaticamente e usará o token de sessão mais recente. Para obter mais informações, consulte utilizar tokens de sessão. As instruções neste artigo se aplicam somente às seguintes condições:

  • Sua conta de Azure Cosmos DB usa Consistência da sessão.
  • Você está gerenciando os tokens de sessão manualmente.
  • Você está usando várias versões do SDK ao mesmo tempo.

Formatos de token de sessão

Há dois formatos de token de sessão: simples e vetor. Esses dois formatos não são intercambiáveis, portanto, o formato deve ser convertido ao passar para o aplicativo cliente com versões diferentes.

  • O formato de token de sessão simples é usado pelo SDK do .net V1 (Microsoft.Azure.DocumentDB-version 1.x)
  • O formato do token de sessão de vetor é usado pelo SDK do .net V2 (Microsoft.Azure.DocumentDB-version 2.x)

Token de sessão simples

Um token de sessão simples tem este formato: {pkrangeid}:{globalLSN}

Token de sessão de vetor

O token de sessão de vetor tem o seguinte formato: {pkrangeid}:{Version}#{GlobalLSN}#{RegionId1}={LocalLsn1}#{RegionId2}={LocalLsn2}....#{RegionIdN}={LocalLsnN}

Converter em token de sessão simples

Para passar um token de sessão para o cliente usando o SDK do .NET v1, use um formato de token de sessão simples . Por exemplo, use o código de exemplo a seguir para convertê-lo.

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

Converter em token de sessão de vetor

Para passar um token de sessão para o cliente usando o SDK do .NET v2, use o formato de token de sessão de vetor . Por exemplo, use o código de exemplo a seguir para convertê-lo.

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

Próximas etapas

Leia os seguintes artigos: