是否有快速,廉价,可靠的会话状态机制可用于免费F1 WebApp ASP.NET进行演示配置?
我知道Windows Azure会话管理在SO上进行了很多讨论,但是这个特殊的配置问题似乎已经过时了。
可用的配置选项似乎是:
InProc模式:不建议在云端使用Azure F1 WebApp,理论上它应该可用于演示网站。但是,我的经验是,会话超时无法预测,并且与web.config文件中的设置无关。
Azure Redis缓存:推荐但不支持免费F1 WebApps;需要升级到付费计划。 (参考:https://azure.microsoft.com/en-gb/pricing/details/cache/)
Azure SQL:不推荐或不支持。 **如果您已经运行Azure SQL服务器,这似乎是一个可行的选择。参考:https://azure.microsoft.com/en-gb/blog/using-sql-azure-for-session-state/。不幸的是,我发现修改后的InstallSqlState.sql无法找到,所有下载链接都失败了(例如:https://support.microsoft.com/en-us/kb/2006191)。 **通用Web提供商可能会提供解决方案(参考:http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx)但至少对我来说还不清楚 - 这些是否提供会话管理支持以及SQL Server连接支持。
Azure表存储:一个潜在的选择,但似乎是一个过时的解决方案,因为所有链接都被破坏了。 (参考:https://www.simple-talk.com/cloud/platform-as-a-service/managing-session-state-in-windows-azure-what-are-the-options/)。我从来没有使用Azure表,所以这看起来很深奥。
StateServer:使用免费的F1网络广告是不可能的。可能需要虚拟机。
自定义:是的,这可行。 ** Redis Cache是一个自定义会话管理器,所以我假设可以使用另一个。 **替代AppFabric(参考:ASP.NET session state provider in Azure)似乎不再受支持,并且是付费解决方案。 **也许有一种替代的自定义解决方案我还没有研究过。
Azure缓存服务和基于角色的缓存:已于2016年11月30日退休。(参考:https://azure.microsoft.com/en-gb/documentation/articles/cache-faq/#which-azure-cache-offering-is-right-for-me)。
在我看来,没有底线。如果有人能证明不是这样的话我真的很感激。
编辑:
我一整天都在考虑和修补这个问题。到目前为止我的发现是:
1)升级到D1 WebApp服务计划可以显着提高会话状态管理的可靠性,但仍然容易出现不可预测性。正如Hrvoje Hudo在下面指出的那样,你不能指望免费或共享的可靠性。
2)安装ASP.NET Universal Providers似乎是一个解决方案。我使用MSVC2013创建了一个新的MVC WebApp项目,选择了Azure托管,输入:
install-package Microsoft.Aspnet.Providers
在包管理控制台中添加: 会话[ “时间”] = DateTime.Now.ToString() 到Home Index视图并在about view using中引用它:
ViewBag.Message = Session["Time"]
并将web.config更新为:
<sessionState mode="Custom" customProvider="DefaultSessionProvider" timeout="1">
<providers>
<add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=Whatever" connectionStringName="DbaseName"/>
</providers>
</sessionState>
当我发布网站时,默认数据库是在我的Azure SQL Server上创建的,由发布脚本.json提供,包含我的所有配置设置并交换它们,并在数据库上创建一个dbo会话表。
浏览网站时,会在数据库表上创建新会话 - 我可以使用MS Management Studio 2013查看它们 - 并在超时(60秒+)后删除。
我将网站降级为免费(确保默认情况下没有配置为更高的计划,MSVC曾经这样做),一切似乎仍然有效。这似乎是我在寻找的。 p>
3)Azure表。还不能理解这些!如果有人知道一个好的“如何”教程,我很乐意看看它。
编辑2:
经过一天的浸泡测试后,我现在90%确信ASP.NET Universal Providers是快速发展的方法。使用免费Azure Web应用程序的可靠会话。我不能说它是免费的,因为SQL Server必须付费(基本=〜下午4点见:https://azure.microsoft.com/en-gb/pricing/details/sql-database/),但它肯定不贵,如果你还在使用SQL Server - 就像我一样 - 这很有意义。
答案 0 :(得分:1)
没有“银弹”会话状态,这就是为什么你有这些选项,选择最适合你的要求和商业案例的原因。对于免费的网络应用程序,你不能期望可靠的服务,Azure将定期重新启动你的应用程序池,并有很多限制,所以默认的InProc可能是一个问题 - 但你再次使用免费套餐。因此,既然你想节省一些钱 - 花时间编写自己的,使用Azure存储(表或blob,我会使用表)或其他一些存储机制。