0

我正在使用带有实体框架的 WebApi 来实现 REST 服务。我需要将使用情况记录到数据库中。我可以在控制器返回之前或在 ActionFilterAttribute 中执行此操作。我希望能够触发更新数据库的调用,但我不想等待完成。我希望响应返回给用户而不等待更新。

我正在考虑使用 BackgroundWorker 并传入对象。

有人对这是否是这样做的好方法有想法吗?

4

3 回答 3

1

我认为您应该问自己的问题是数据库更新可以增加多少延迟到您的整体响应时间。在大多数情况下,将更新作为请求处理的一部分进行会非常简单。后台工作人员通常不是一个好的解决方案,但这是与该主题相关的好读物。如果您绝对需要在请求处理之外进行数据库更新,那么从可靠性的角度考虑,最好考虑 MSMQ、RabbitMQ 等队列机制。

于 2013-10-01T22:30:32.877 回答
0

您是否尝试过探索 NLog 的异步功能?我们通过包装数据库日志目标来使用 NLog 的异步包装器,如下所示:

<targets async="true">
  <target name="dbLog" xsi:type="Database" dbProvider="sqlserver" connectionString=".." />
  .
  .
</targets>

可以在此处找到使用 NLog 记录到 MS SQL DB 的快速启动 此外,您可以使您的日志记录方法调用异步(需要 .NET 4.5),如果您不关心结果,请选择不等待方法执行。查看此 SO 线程以获取示例 NLog.config。

于 2013-10-03T07:15:42.410 回答
0

我相信我的性能问题与在 VS2012 调试器中运行有关。直接运行站点时,性能急剧提高。因此,如果在部署到测试服务器时证明这一点,我不需要做任何“调整技巧”。

于 2013-10-02T20:44:34.623 回答