【问题标题】:Azure web application (webapi) in Web Farm / Load balancingWeb Farm / 负载平衡中的 Azure Web 应用程序 (webapi)
【发布时间】:2014-07-23 14:37:15
【问题描述】:

网络表单: 在网络农场环境中的网络表单(带有会话)状态应用程序中,会话存储在 SQL Server 存储中,网络农场中的所有服务器都可以访问该存储。这意味着登录用户的请求可以得到相同的会话,而不管它命中了场中的哪个服务器。

WebAPI: 我知道 webapi 在设计上是无状态的,所以对于真正的 webapi 应用程序,我不需要担心如何维护状态等。通常身份验证令牌在请求之间传递,只要它有效,登录就可以访问它需要的任何资源在服务器上。这对于一个托管 webapi 的 Web 服务器来说很好。但是网络农场呢? “Session”(或 Webapi 中的等效术语)在 WebApi 场中是如何管理的?

我知道 azure 提供了以下选项来命名少数几个.. Azure SQL 服务器 Azure 表存储/队列 缓存服务

它们似乎给架构增加了额外的复杂性(这在使用 SQL Server Session 的 WebForm 中要容易得多)。

另一个稍微不同的问题(可能有点基本)是如何在 webapi 场中跟踪请求/响应?即当客户端向 webapi 发出请求并且 webapi 发送异步响应时,服务器如何确保其追溯到客户端?

编辑: 我不是要实现 Session is Webapi,而是如何在没有会话状态的 webapi 中实现同样的事情。

谢谢

【问题讨论】:

    标签: session azure asp.net-web-api webforms web-farm


    【解决方案1】:

    是的。在 REST 中使用会话是一件非常糟糕的事情。

    但您也可以在 Web API 中模拟会话。在 Web 表单中,服务器在 HTML 中添加了生成的会话 ID,因此当用户提交时,该会话 ID 将包含在他们的请求中。您也可以使用 Web API 模拟同样的事情。你可以查看这个Accessing Session Using ASP.NET Web API

    最好将信息存储在 memcached 或 redis 中并过期。它也适用于网络农场。

    无论如何,我不建议在 Web API 中使用“会话”。

    【讨论】:

    • 感谢@Michael Sync。我同意不在 WebAPI 中使用 Session。我只是在 Webapi 中寻找会话的替代方案。基本上只是想知道在 webapi 中没有会话状态的情况下事情是如何完成的。
    • 如果您正在寻找存储状态的替代方法,请不要这样做。但是您仍然可以使用缓存(应用程序级别)或使用 memcached 或 redis 进行集中缓存。
    猜你喜欢
    • 2010-10-25
    • 2016-09-28
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 2012-01-11
    • 2015-12-17
    • 2012-06-29
    • 1970-01-01
    相关资源
    最近更新 更多