Web场/负载平衡中的Azure Web应用程序(Web api)

时间:2014-06-03 09:54:12

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

WebForm : 在Web场环境中的webform(带会话)状态应用程序中,会话存储在SQL Server存储中,可由webfarm中的所有服务器访问。这意味着登录用户的请求可以获得相同的会话,而不管它所在的服务器场中的哪个服务器。

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

我知道azure给出了以下几个选项。 Azure SQL Server Azure表存储/队列 缓存服务

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

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

修改 我不打算实现Session是Webapi,而是在没有会话状态的webapi中实现同样的事情。

由于

1 个答案:

答案 0 :(得分:1)

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

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

您最好将信息存储在memcached或redis中,并且过期。它也适用于Web场。

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