我有一个asp.net应用程序,允许一组学生预订“房间”。每个房间都设有自己的交换账户,因此当学生预订房间时,会进行EWS通话以在日历上创建预约。使用jquery我们显示开放时间段,以便学生只能预订可用时间。
在经历高流量和同一时段的竞争之后,我不得不同时处理预订。我的想法是,我可以暂停主线程,拨打电话找到我刚刚发出的预约,验证从房间接受,将“确认预约”返回给接受的用户和“拒绝预约”给用户得到了下降。我发现部分成功,因为EWS每次返回响应都不可靠。有时,当房间通过电子邮件接受约会时,用户会得到未知的响应。该应用程序依赖于EWS的响应,并且似乎在高流量且具有大量同时交易的情况下,EWS无法响应我的呼叫。有趣的是,虽然所有其他流量很少的部门都喜欢这款应用,但它对他们来说非常有用:(
我的想法是我需要排队我的EWS电话。
有人可以给我一些关于管理EWS同时呼叫的相同/不同资源和时间的指导吗?
是否有人排队等待EWS用户交易(如果条件调用,创建约会,确认约会和删除约会)?
答案 0 :(得分:2)
据我所知,没有办法在EWS内本地排队请求。您最好的选择可能是在您的服务器上使用某种形式的锁定,以确保一次只执行一个请求。
或者,您可以使用.NET中的Tasks功能并以这种方式排队命令。使用LimitedConcurrencyLevelTaskScheduler
意味着您可以限制正在执行的请求数。如果您发现一次可以处理3个请求,它还允许您配置此项。可以找到更多详细信息和代码示例here。
您必须记住,如果应用程序池因任何原因被回收,排队的任何请求都将不复存在。