ASP.Net Web 服务同步调用进程数据库队列

Posted

技术标签:

【中文标题】ASP.Net Web 服务同步调用进程数据库队列【英文标题】:ASP.Net web service synchronize call to process database queue 【发布时间】:2018-03-03 16:03:12 【问题描述】:

我有一个类似于预订系统的 asp.net 网络服务,不能由多人预订同一个座位,预订的资格基于 SQL 服务器中的一些其他表值。我计划使用here 中提到的 SQL 服务器队列处理。我的客户希望在同步调用中执行此操作,这意味着我们希望在相同的 Web 服务方法调用中得到结果。我的问题是允许同步方法调用处理队列并等待队列返回值(通过一个时间跨度左右的循环)的效率如何。请告知实现这一目标的最佳方法。

【问题讨论】:

【参考方案1】:

您正在加入XY problem trap。您的主要目标是确保没有座位可以预订两次。您应该重新考虑使用队列的方法是解决此问题的适当方法。队列非常适合在后台任务上有效地使用您的处理资源。对于实时处理(如您的),它将产生更多它解决的问题。

您似乎想避免当多个用户尝试访问同一个座位两次时发生的竞争情况。队列并不能解决问题,您只需将其移至入队阶段。最先进入队列的人获胜。最后,您添加了一个没有任何好处的不必要的并发症。

解决您的问题的一个更简单的解决方案是在您的数据库上创建一个唯一密钥,以确保没有座位可以被保留两次。一旦您尝试预订刚刚被占用的座位,您将收到带有error number 2627 的 SQLException。然后您可以提示用户座位已被占用。

【讨论】:

以上是关于ASP.Net Web 服务同步调用进程数据库队列的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery 调用 ASP.NET Web 服务?

如何使用 ajax 从跨域调用 asp.net Web 服务

在asp.net里怎样异步调用WebService方法

使用 ajax asp.net 调用 Web 服务

如何使用jQuery调用带有参数的asp.net asmx web服务来获取响应

ASP.Net 页面调用报告服务 Web 服务得到“401 Unauthorized”错误