【问题标题】:Call methods inside webapi synchronously同步调用 webapi 内部的方法
【发布时间】:2018-11-06 09:28:36
【问题描述】:

我有将数据保存到数据库中的 POST 方法。

[POST]
public void SaveData()
{
  try
  {
    BusinessLayer businessLayerObject = new BusinessLayer();
    businessLayerObject.SaveDataIntoDB();
  }
  catch(Exception ex)
  {}
}

BusinessLayer.cs :-

public void SaveDataIntoDB()
{
  try
  {
    using (var context = new EntityContext())
   {
    using (DbContextTransaction transaction=context.Database.BeginTransaction())
    {
 .... ......
    }
   }
  }
catch(Exception ex)
  {}
}

当 SaveData 方法同时存在多个请求时,我希望 SaveDataIntoDB() 方法被同步调用。 当一个 SaveDataIntoDB() 方法的处理完成时,它应该调用另一个。 可以做些什么来做到这一点?

目前没有这样做。

【问题讨论】:

  • 你想要某种队列吗?
  • 不完全是队列,但我的需要是,当多个请求时,它应该一一调用SaveDataIntoDB方法。
  • 您希望它们以先进先出的方式处理吗?或者就在完成时,从等待处理的作业集合中获取任何一个?
  • 你需要更清楚地解释你的问题是什么。你看到的行为是什么,你需要的行为是什么。代码现在的方式是,它们将以它们进入的任何顺序执行,有些甚至会同时执行。 SQL 有一个可用的连接池。那么究竟是什么问题呢?
  • 为什么 SQL 命令的顺序如此重要?

标签: c# .net asp.net-web-api


【解决方案1】:

您正在寻找的是一个队列 (FIFO)。如何实现这在很大程度上取决于您的部署方式。

如果您使用的是单实例部署,则可以创建一个包装 Queue<T> 的类。它应该实现为单例,并以异步方式将排队的消息发送到数据库。

如果您使用横向扩展方法,您将需要 RabbitMQ、MSMQ 或其他消息队列之类的东西...

【讨论】:

    猜你喜欢
    • 2018-05-25
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    相关资源
    最近更新 更多