【问题标题】:Session variables with multiple instances on windows AzureWindows Azure 上具有多个实例的会话变量
【发布时间】:2012-05-27 16:14:50
【问题描述】:

我正在开发一个 MVC3 项目和 SQL Azure 数据库。当我部署超过 1 个实例时,会话变量会出现一些问题。

为了更清楚,我将表的结果存储在会话变量中,并将结果传递给模型,用户可以修改和操作数据,直到他点击“保存”按钮。

当用户点击“保存”时,我从模型中获取新值并将它们传递给 BLL 和 DAL 层以更新数据库。

我不知道这是否是正确的解决方案!但是客户端不会在每次数据更改时都访问数据库。

请帮忙。

【问题讨论】:

    标签: c# .net asp.net-mvc-3 azure azure-sql-database


    【解决方案1】:

    您遇到的问题是由于会话数据本地存储在服务器上(这被 ASP.NET 称为 InProc)。当您使用多个实例时,这些数据不会在实例之间共享。为了实现这一点,您有几个选择:

    • 将会话数据存储在 SQL Azure 数据库中。
    • 将会话数据存储在 Azure 的表存储中。
    • 将会话数据存储在 Azure 的缓存服务中(可能是最快的,但也是最昂贵的)。

    这里有更多信息:http://acloudyplace.com/2012/02/managing-session-state-in-windows-azure-what-are-the-options/

    【讨论】:

    • 谢谢!您的回答帮助我理解了为什么当我部署多个实例时它不起作用。如果您有更好的想法来管理数据而不使用会话变量,我会很高兴
    • 您可以查看 ViewBag 将数据从控制器传递到视图,查看 ViewData 获取只需读取一次的数据。如果这些都不能帮助您,那么会话数据就可以了。只要你把它存储在 SQL Azure/Table 存储中即可。
    • 官方建议的方式是使用 AppFabric Cache 作为会话提供者
    • Cache 或 SQL Azure 都是不错的选择,尤其是自从 SDK v1.4 添加了 Universal Providers 后,SQL Azure 得到了全面支持。
    • 好答案。我所做的是尽可能地摆脱会话使用,这将使您的应用程序更具可扩展性。然后将 Azure Blob 存储用于会话状态,而不是应用中只有 2 或 3 个位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    相关资源
    最近更新 更多