Provider di stato della sessione ASP.NET per Cache Redis di AzureASP.NET Session State Provider for Azure Redis Cache

Cache Redis di Azure include un provider di stato della sessione che consente di archiviare lo stato della sessione in una cache anziché in memoria o in un database di SQL Server.Azure Redis Cache provides a session state provider that you can use to store your session state in a cache rather than in-memory or in a SQL Server database. Per usare il provider di stato della sessione di memorizzazione nella cache, configurare innanzitutto la cache e quindi l'applicazione ASP.NET per la cache usando il pacchetto NuGet dello stato della sessione per Cache Redis.To use the caching session state provider, first configure your cache, and then configure your ASP.NET application for cache using the Redis Cache Session State NuGet package.

In un'app reale per il cloud spesso non è facile evitare di archiviare qualche forma di stato per una sessione utente, ma alcuni approcci hanno più effetto di altri sulle prestazioni e sulla scalabilità.It's often not practical in a real-world cloud app to avoid storing some form of state for a user session, but some approaches impact performance and scalability more than others. Se è necessario archiviare lo stato, la soluzione migliore è mantenere piccola la quantità di stato e archiviarla nei cookie.If you have to store state, the best solution is to keep the amount of state small and store it in cookies. Se non è fattibile, la seconda miglior soluzione è usare lo stato della sessione ASP.NET con un provider per la cache distribuita in memoria.If that isn't feasible, the next best solution is to use ASP.NET session state with a provider for distributed, in-memory cache. La soluzione peggiore dal punto di vista delle prestazioni e della scalabilità è usare un provider di stato della sessione supportato da un database.The worst solution from a performance and scalability standpoint is to use a database backed session state provider. Questo argomento fornisce indicazioni sull'uso del provider di stato della sessione ASP.NET per Cache Redis di Azure.This topic provides guidance on using the ASP.NET Session State Provider for Azure Redis Cache. Per informazioni sulle altre opzioni dello stato sessione, vedere Opzioni dello stato della sessione ASP.NET.For information on other session state options, see ASP.NET Session State options.

Archiviare lo stato della sessione ASP.NET nella cacheStore ASP.NET session state in the cache

Per configurare un'applicazione client in Visual Studio con il pacchetto NuGet Redis Cache Session State, fare clic su Gestione pacchetti NuGet e quindi su Console di Gestione pacchetti dal menu Strumenti.To configure a client application in Visual Studio using the Redis Cache Session State NuGet package, click NuGet Package Manager, Package Manager Console from the Tools menu.

Eseguire questo comando nella finestra Package Manager Console.Run the following command from the Package Manager Console window.

Install-Package Microsoft.Web.RedisSessionStateProvider

Importante

Se si sta usando la funzionalità di clustering del livello Premium, è necessario usare RedisSessionStateProvider 2.0.1 o versione successiva. In caso contrario, verrà generata un'eccezione.If you are using the clustering feature from the premium tier, you must use RedisSessionStateProvider 2.0.1 or higher or an exception is thrown. Il passaggio alla versione 2.0.1 o successiva è una modifica significativa. Per altre informazioni, vedere la pagina relativa ai dettagli delle modifiche significative della versione 2.2.0.Moving to 2.0.1 or higher is a breaking change; for more information, see v2.0.0 Breaking Change Details. Al momento dell'aggiornamento di questo articolo, la versione corrente del pacchetto è 2.2.3.At the time of this article update, the current version of this package is 2.2.3.

Il pacchetto NuGet del provider di stato della sessione Redis ha una dipendenza dal pacchetto StackExchange.Redis.StrongName.The Redis Session State Provider NuGet package has a dependency on the StackExchange.Redis.StrongName package. Se il pacchetto StackExchange.Redis.StrongName non è presente nel progetto, viene installato.If the StackExchange.Redis.StrongName package is not present in your project, it is installed.

Nota

Oltre al pacchetto StackExchange.Redis.StrongName con nome sicuro, è disponibile anche la versione StackExchange.Redis priva di nome sicuro.In addition to the strong-named StackExchange.Redis.StrongName package, there is also the StackExchange.Redis non-strong-named version. Se il progetto usa la versione di StackExchange.Redis con nome non sicuro, è necessario disinstallarla per evitare conflitti di denominazione nel progetto.If your project is using the non-strong-named StackExchange.Redis version you must uninstall it, otherwise you get naming conflicts in your project. Per altre informazioni su questi pacchetti, vedere Configurare i client della cache .NET.For more information about these packages, see Configure .NET cache clients.

Il pacchetto NuGet scarica e aggiunge i riferimenti all'assembly richiesto e aggiunge la sezione seguente al file web.config.The NuGet package downloads and adds the required assembly references and adds the following section into your web.config file. Questa sezione contiene la configurazione richiesta dall'applicazione ASP.NET per usare il provider di stato della sessione Cache Redis.This section contains the required configuration for your ASP.NET application to use the Redis Cache Session State Provider.

<sessionState mode="Custom" customProvider="MySessionStateStore">
    <providers>
    <!--
    <add name="MySessionStateStore"
           host = "127.0.0.1" [String]
        port = "" [number]
        accessKey = "" [String]
        ssl = "false" [true|false]
        throwOnError = "true" [true|false]
        retryTimeoutInMilliseconds = "0" [number]
        databaseId = "0" [number]
        applicationName = "" [String]
        connectionTimeoutInMilliseconds = "5000" [number]
        operationTimeoutInMilliseconds = "5000" [number]
    />
    -->
    <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="127.0.0.1" accessKey="" ssl="false"/>
    </providers>
</sessionState>

La sezione commentata fornisce un esempio degli attributi e delle impostazioni di esempio per ogni attributo.The commented section provides an example of the attributes and sample settings for each attribute.

Configurare gli attributi con i valori del pannello Cache nel portale di Microsoft Azure e configurare gli altri valori come desiderato.Configure the attributes with the values from your cache blade in the Microsoft Azure portal, and configure the other values as desired. Per istruzioni sull'accesso alle proprietà della cache, vedere Configurare le impostazioni di Cache Redis di Azure.For instructions on accessing your cache properties, see Configure Redis cache settings.

  • host : specificare l'endpoint della cache.host – specify your cache endpoint.
  • port : usare la porta non SSL o la porta SSL, in base alle impostazioni SSL.port – use either your non-SSL port or your SSL port, depending on the ssl settings.
  • accessKey : usare la chiave primaria o secondaria per la cache.accessKey – use either the primary or secondary key for your cache.
  • ssl : true per proteggere le comunicazioni cache/client con SSL; in caso contrario, false.ssl – true if you want to secure cache/client communications with ssl; otherwise false. Assicurarsi di specificare la porta corretta.Be sure to specify the correct port.
    • Per le nuove cache la porta senza SSL è disabilitata per impostazione predefinita.The non-SSL port is disabled by default for new caches. Specificare true per questa impostazione per usare la porta SSL.Specify true for this setting to use the SSL port. Per altre informazioni sull'abilitazione della porta senza SSL, vedere la sezione Porte di accesso nell'argomento Configurare una cache.For more information about enabling the non-SSL port, see the Access Ports section in the Configure a cache topic.
  • throwOnError: impostare su true se si vuole che venga generata un'eccezione in caso di errore durante l'operazione; in caso contrario, scegliere false.throwOnError – true if you want an exception to be thrown if there is a failure, or false if you want the operation to fail silently. È possibile verificare la presenza di un errore controllando la proprietà statica Microsoft.Web.Redis.RedisSessionStateProvider.LastException.You can check for a failure by checking the static Microsoft.Web.Redis.RedisSessionStateProvider.LastException property. Il valore predefinito è true.The default is true.
  • retryTimeoutInMilliseconds : le operazioni non riuscite vengono ritentate durante questo intervallo, specificato in millisecondi.retryTimeoutInMilliseconds – Operations that fail are retried during this interval, specified in milliseconds. Il primo tentativo si verifica dopo 20 millisecondi e quelli successivi dopo ogni secondo fino alla scadenza dell'intervallo retryTimeoutInMilliseconds.The first retry occurs after 20 milliseconds, and then retries occur every second until the retryTimeoutInMilliseconds interval expires. Immediatamente dopo questo intervallo, l'operazione viene ritentata un'ultima volta.Immediately after this interval, the operation is retried one final time. Se l'operazione non riesce ancora, l'eccezione viene generata per il chiamante, in base all'impostazione di throwOnError.If the operation still fails, the exception is thrown back to the caller, depending on the throwOnError setting. Il valore predefinito è 0 che indica nessun tentativo.The default value is 0, which means no retries.
  • databaseId : specifica il database da usare per i dati di output della cache.databaseId – Specifies which database to use for cache output data. Se non è specificato alcun valore, verrà usato il valore predefinito 0.If not specified, the default value of 0 is used.
  • applicationName: le chiavi vengono archiviate in Redis come {<Application Name>_<Session ID>}_Data.applicationName – Keys are stored in redis as {<Application Name>_<Session ID>}_Data. Questo schema di denominazione consente a più applicazioni di condividere la stessa istanza di Redis.This naming scheme enables multiple applications to share the same Redis instance. Questo parametro è facoltativo e se non lo si specifica, verrà usato un valore predefinito.This parameter is optional and if you do not provide it a default value is used.
  • connectionTimeoutInMilliseconds : questa impostazione consente di eseguire l'override dell'impostazione connectTimeout nel client StackExchange.Redis.connectionTimeoutInMilliseconds – This setting allows you to override the connectTimeout setting in the StackExchange.Redis client. Se non viene specificato alcun valore, verrà usata l'impostazione di connectTimeout predefinita pari a 5000.If not specified, the default connectTimeout setting of 5000 is used. Per altre informazioni, vedere Modello di configurazione StackExchange.Redis.For more information, see StackExchange.Redis configuration model.
  • operationTimeoutInMilliseconds : questa impostazione consente di eseguire l'override dell'impostazione syncTimeout nel client StackExchange.Redis.operationTimeoutInMilliseconds – This setting allows you to override the syncTimeout setting in the StackExchange.Redis client. Se non viene specificato alcun valore, verrà usata l'impostazione di syncTimeout predefinita pari a 1000.If not specified, the default syncTimeout setting of 1000 is used. Per altre informazioni, vedere Modello di configurazione StackExchange.Redis.For more information, see StackExchange.Redis configuration model.

Per altre informazioni su queste proprietà, vedere il post di blog originale nell' annuncio del provider di stato della sessione ASP.NET per Redis.For more information about these properties, see the original blog post announcement at Announcing ASP.NET Session State Provider for Redis.

Non dimenticare di impostare come commento la sezione del provider di stato della sessione InProc standard nel file web.config.Don’t forget to comment out the standard InProc session state provider section in your web.config.

<!-- <sessionState mode="InProc"
     customProvider="DefaultSessionProvider">
     <providers>
        <add name="DefaultSessionProvider"
              type="System.Web.Providers.DefaultSessionStateProvider,
                    System.Web.Providers, Version=1.0.0.0, Culture=neutral,
                    PublicKeyToken=31bf3856ad364e35"
              connectionStringName="DefaultConnection" />
      </providers>
</sessionState> -->

Dopo l'esecuzione di questi passaggi, l'applicazione è configurata per l'uso del provider di stato della sessione Cache Redis.Once these steps are performed, your application is configured to use the Redis Cache Session State Provider. Quando si usa lo stato della sessione nell'applicazione, questo viene archiviato in un'istanza di Cache Redis di Azure.When you use session state in your application, it is stored in an Azure Redis Cache instance.

Importante

I dati archiviati nella cache devono essere serializzabili, diversamente dai dati che possono essere archiviati nel provider di stato della sessione ASP.NET in memoria predefinito.Data stored in the cache must be serializable, unlike the data that can be stored in the default in-memory ASP.NET Session State Provider. Quando il provider di stato della sessione per Redis viene usato, assicurarsi che i tipi di dati da archiviare nello stato della sessione siano serializzabili.When the Session State Provider for Redis is used, be sure that the data types that are being stored in session state are serializable.

Opzioni dello stato della sessione ASP.NETASP.NET Session State options

  • Provider di stato della sessione in memoria: questo provider archivia lo stato della sessione in memoria.In Memory Session State Provider - This provider stores the Session State in memory. Il vantaggio di usare questo provider è che è semplice e veloce.The benefit of using this provider is it is simple and fast. Non è però possibile ridimensionare le app Web se si usa il provider in memoria perché non viene distribuito.However you cannot scale your Web Apps if you are using in memory provider since it is not distributed.
  • Provider di stato della sessione SQL Server: questo provider archivia lo stato della sessione in SQL Server.Sql Server Session State Provider - This provider stores the Session State in Sql Server. Usare questo provider per archiviare lo stato della sessione in una risorsa di archiviazione persistente.Use this provider if you want to store the Session state in persistent storage. È possibile ridimensionare l'app Web, ma l'uso di SQL Server per la sessione ha effetto sulle prestazioni dell'app Web.You can scale your Web App but using Sql Server for Session has a performance impact on your Web App.
  • Provider di stato della sessione in memoria distribuito, ad esempio provider di stato della sessione di Cache Redis: questo provider offre il meglio di entrambe le soluzioni.Distributed In Memory Session State Provider such as Redis Cache Session State Provider - This provider gives you the best of both worlds. L'app Web può avere un provider di stato della sessione semplice, veloce e scalabile.Your Web App can have a simple, fast, and scalable Session State Provider. Dal momento che questo provider archivia lo stato della sessione in una cache, l'app deve tenere in considerazione tutte le caratteristiche associate quando comunica con una cache in memoria distribuita, ad esempio in caso di errori di rete temporanei.Because this provider stores the Session state in a Cache, your app has to take in consideration all the characteristics associated when talking to a Distributed In Memory Cache, such as transient network failures. Per le procedure consigliate sull'uso della cache, vedere Informazioni aggiuntive sulla memorizzazione nella cache in Microsoft Patterns & Practices e Azure Cloud Application Design and Implementation Guidance (Guida alla progettazione e all'implementazione delle applicazioni cloud di Azure).For best practices on using Cache, see Caching guidance from Microsoft Patterns & Practices Azure Cloud Application Design and Implementation Guidance.

Per altre informazioni sullo stato della sessione e altre procedure consigliate, vedere Procedure consigliate per lo sviluppo Web (compilazione di app reali per il cloud con Azure).For more information about session state and other best practices, see Web Development Best Practices (Building Real-World Cloud Apps with Azure).

Passaggi successiviNext steps

Vedere Provider di cache di output ASP.NET per la Cache Redis di Azure.Check out the ASP.NET Output Cache Provider for Azure Redis Cache.