2017-09-22 68 views
0

我有一个asp.net web服务,它就像一个预订系统,不能保留多个人的同一个座位,并且预留的资格是基于其他一些表值在SQL服务器中。我打算使用SQL服务器队列处理,如here所述。我的客户希望在同步调用中执行此操作,这意味着我们希望在相同的Web服务方法调用中获得结果。我的问题是,它允许一个同步的方法调用来处理一个队列,并等待队列返回值(通过一个时间跨度内的循环等等)有多高效。请建议最佳方法来实现这一点。ASP.Net web服务同步调用来处理数据库队列

回答

1

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

看起来好像你想避免当多个用户试图访问同一个座位两次时出现的竞态条件。队列不能解决问题,只需将其移至入场阶段即可。首先进入队列的人获胜。最后,你添加了一个不必要的复杂功能,不会带来任何好处。

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