Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 记录Web API调用MVC4_Asp.net_Asp.net Mvc_Caching_Logging_Asp.net Web Api - Fatal编程技术网

Asp.net 记录Web API调用MVC4

Asp.net 记录Web API调用MVC4,asp.net,asp.net-mvc,caching,logging,asp.net-web-api,Asp.net,Asp.net Mvc,Caching,Logging,Asp.net Web Api,我需要在每次调用Web API时都登录到数据库。 现在我当然不想每次打电话都去我的数据库 假设我的缓存中有一个字典或哈希表对象, 每10000条记录我就会进入数据库 我仍然不想让每10000个用户等待这个操作。 由于应用程序池已关闭,我无法为长时间操作启动其他线程 基本上可以随时回收 对于这种情况,最好的解决方案是什么 谢谢我认为你对耐久性的看法不太一致。由于应用程序池回收或服务器崩溃,10000个对象的缓存也可能随时丢失 但对于如何在不引起用户等待的情况下执行大型操作的原始问题: 限制应用程

我需要在每次调用Web API时都登录到数据库。 现在我当然不想每次打电话都去我的数据库

假设我的缓存中有一个字典或哈希表对象, 每10000条记录我就会进入数据库

我仍然不想让每10000个用户等待这个操作。 由于应用程序池已关闭,我无法为长时间操作启动其他线程 基本上可以随时回收

对于这种情况,最好的解决方案是什么


谢谢

我认为你对耐久性的看法不太一致。由于应用程序池回收或服务器崩溃,10000个对象的缓存也可能随时丢失

但对于如何在不引起用户等待的情况下执行大型操作的原始问题:

  • 限制应用程序池回收并处理潜在的数据丢失

  • 定期将缓存的消息转储到Windows服务以进行进一步处理。这仍然不能100%保证保留数据,例如服务/服务器可能崩溃

  • 使用消息队列()。消息队列可以持久保存到磁盘,因此可以认为这是合理可靠的

消息队列(MSMQ)技术使应用程序能够以 跨异构网络和网络进行通信的不同时间 可能暂时脱机的系统。应用程序将消息发送到 队列并从队列中读取消息

消息队列提供了有保证的消息传递,高效 路由、安全性和基于优先级的消息传递。它可以用来 实现异步和同步场景的解决方案 要求高性能

更进一步说


根据您的要求和/或环境,您可以消除缓存,并立即(快速)将所有消息写入消息队列,而不用担心性能损失或大型写入操作。

谢谢!事实上,我没有考虑将它带到其他服务/队列