在Azure中使用SQL作为会话缓存

时间:2016-02-10 12:40:52

标签: asp.net session azure caching azure-sql-database

我目前正在寻找在Azure Webservice中使用会话缓存的最佳方法。因为使用了多个实例,所以标准的asp.net会话状态不起作用。

我发现一些文档可以通过使用外部会话状态提供程序来解决,该提供程序允许使用共享缓存(Redis缓存)或SQL作为外部提供程序。

但是当我发现很多文档如何配置Redis缓存时,我没有找到一个如何配置Azure-SQL-Database进行缓存的示例。

如果Azure中仍然支持此功能:您能提供一个示例吗?

2 个答案:

答案 0 :(得分:1)

您可以通过以下方式执行此操作:

 <sessionState mode="SQLServer"
sqlConnectionString="Server=tcp:[serverName].database.windows.net;Database=myDataBase;User ID=[LoginForDb]@[serverName];Password=[password];Trusted_Connection=False;Encrypt=True;"
cookieless="false" timeout="20" allowCustomSqlDatabase="true" />

更好的解决方案是使用表存储,因为您可以在表存储中指定对象的生命周期。

更多信息:managing-session-state-in-windows-azure-what-are-the-options

答案 1 :(得分:1)

这种方法可能避免需要知道如何手动创建AspNetSessionState数据库对象:

1)安装NuGet包https://www.nuget.org/packages/Microsoft.AspNet.Providers/2.0.0

  

ASP.NET Universal Providers在ASP.NET 4中为所有版本的SQL Server 2005及更高版本和SQL Azure添加了提供程序支持。如果您使用这些提供程序来开发您的应用程序,该应用程序将为Azure等云环境做好准备......

它依赖于EntityFramework,但我想我们就是这样。它会将此添加到您的web.config <system.web>部分:

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

2)但是对于发布配置,您需要:

    <sessionState mode="Custom" customProvider="DefaultSessionProvider" xdt:Transform="Replace">
  <providers>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider" connectionStringName="YourSessionConnectionStringName" />
  </providers>
</sessionState>

如果您使用配置转换,则需要xdt:Transform="Replace",否则必须将其删除。