我们有一个c#.net Web API服务调用代码,该代码一次无法处理多个数据库请求。该系统用于在线支付需求相对较小的账单。
我们无法控制代码进行更改以解决问题。使用相同代码的另一个组使用WCF API和服务配置将并发请求限制为1,从而有效地解决了问题。我们现在必须在WCF中重写或弄清楚如何使Web API工作。
是否有办法让Web API对请求进行排队并一次处理一个请求,同时仍然保持实时操作'对于最终用户?
对不起,如果这个含糊不清,我代表实际的程序员请求协助。
答案 0 :(得分:1)
我唯一知道的是“自己动手”。 I.E. :
或者,您可以更改服务以使用fire&忘记带有“锁定”语句的模式以限制对付款部分的访问 - 例如:
private static object s_SyncRoot = new object();
...
new Task(() =>
{
lock (s_SyncRoot)
{
// process payment - single thread
}
}).Start();
return "ok";
...
哪个快速&易于实现 - 但是你牺牲了可靠性 - 例如参见Fire and Forget with ASP.NET MVC。它也不能很好地扩展(如果会有一些请求,你会打开太多并行线程,它可以有效地删除你的API服务