我目前正在寻找在Azure Webservice中使用会话缓存的最佳方法。因为使用了多个实例,所以标准的asp.net会话状态不起作用。
我发现一些文档可以通过使用外部会话状态提供程序来解决,该提供程序允许使用共享缓存(Redis缓存)或SQL作为外部提供程序。
但是当我发现很多文档如何配置Redis缓存时,我没有找到一个如何配置Azure-SQL-Database进行缓存的示例。
如果Azure中仍然支持此功能:您能提供一个示例吗?
答案 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"
,否则必须将其删除。