【问题标题】:Sessions or any alternatives in webAPIwebAPI 中的会话或任何替代方案
【发布时间】:2017-01-12 08:04:46
【问题描述】:

我有一个业务逻辑,其中包含大量数据库提取操作和一些复杂的业务逻辑。 获取的数据在用户会话中很少更改。

  • 许多获取操作(获取的数据在用户会话中很少更改)。
  • 对于表单上的每个操作(按钮单击/文本框中的值更改等...),我们需要运行业务逻辑以检查其是否有效更改。

目前我们正在使用 Asp.net Forms Application,这些业务逻辑在 InSessionScope() 中。 目前我们正在努力迁移到 Restful API(WebAPI)。

  • 我们可以在 RESTFul 中使用 session(InSessionScope()) 吗?
  • 如果不在会话中,如何避免更多的数据库调用并在后续调用中使用相同的对象并提高性能?

【问题讨论】:

  • REST 是无状态的,通过添加 Session 您使其有状态并破坏了拥有它的任何目的。
  • 您可以使用Session。看看这个forums.asp.net/t/1780385.aspx
  • 不要使用会话(内存中),因为如果您有多个 Web 服务器,则会出现问题。熟悉授权令牌、请求范围并了解如何将业务逻辑融入其中。 dotnetcurry.com/aspnet/1223/…
  • @AfnanAhmad 正确,有没有什么机制可以避免后续调用中的数据库调用并提高性能。
  • 我认为您正在寻找缓存机制,我认为有很多资源。

标签: c# asp.net design-patterns asp.net-web-api asp.net-web-api2


【解决方案1】:

根据我的个人经验,永远不要在 Rest 应用程序中使用 Session,因为 AspNET WebAPI 是 .. 即使你可以 .. 而是使用令牌进行授权和用户分析(使用 AspNet 身份)和性能(不要打 DB太多次了)我建议你一些我做过的方法:

1 - USE CACHE!! (有一些很棒的缓存框架和库..你可以使用不同的缓存层..查询..webapi的响应..例如我用来缓存整个API响应(Json)并在POST上自动失效/ PUT / DELETE请求)..在.NET中你可以使用这个https://github.com/filipw/Strathweb.CacheOutput 你也可以使用Redis进行缓存(如果你不想在Server本地缓存但有分布式缓存)

2 - 尝试以 NoSQL 的方式思考 .. 在我们的应用程序中,我们混合使用 DB .. SQL Server 以及 MongoDB(特别是对于大量数据),例如我们使用 SQL Server 来管理 AspNEt身份,但我们使用 MongoDB 来存储我们的产品(我们有大约 600 万个产品),查询大约需要 1 秒(也有聚合!!)..

3 - 如果可以存储一些信息,请尝试在FrontEnd 上使用LocalStorage。 .然后在需要时同步它们..

希望它可以帮助您..享受 WebAPI ..享受 REST! (并尽快离开网络表单......在我的想法中!)

【讨论】:

    【解决方案2】:

    您可以使用自己实现的令牌或 JwtToken。

    如果您选择在登录方法上实现自定义令牌,您必须向您的应用返回一个令牌,接下来在任何 api 调用中传递此令牌(如标头或查询字符串)并在服务器中解密以验证提议。

    【讨论】:

      猜你喜欢
      • 2018-11-25
      • 2018-01-15
      • 2017-05-26
      • 1970-01-01
      • 2010-11-19
      • 2018-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多