我正在开发一个.Net应用程序,它有一个空白的.aspx页面,链接到代码隐藏(.aspx.cs)表。它由来自许多地方的JavaScript函数调用,这些函数使用查询字符串参数调用页面。
取决于参数 - 该页面运行2个存储过程系列。一个家庭创建记录 - 另一个家庭更新记录。然后,任何SQL错误都会通过电子邮件发送给我。
我怀疑是由于代码快速连续执行两次而导致错误 - 我收到一个唯一的主键约束错误。似乎在INSERT发生之前第二次调用该页面。不幸的是,这导致了数据丢失。
我的问题是......
如何“锁定”或“排队”aspx.cs页面执行/请求以确保页面的一个“实例”或“线程”在另一个之前完成?
答案 0 :(得分:0)
将进程的调用与进程的执行分开。
基本上,您会将一个表作为"队列"添加到数据库中,其中每个记录都具有执行相关过程所需的信息。 (从页面发布的数据,基本上,以及任何其他元数据,如排队的用户和排队的时间等。)页面上的代码只会简单地插入一个记录表
与ASP.NET应用程序分开,您将拥有后台进程(Windows服务可能是最好的,计划的控制台应用程序也可以正常工作),它会定期检查该表以获取新记录。当它找到记录时,它会依次对每个记录执行相关的过程。
这使得Web应用程序在单个线程中处理记录时仍然是多线程的(您确实需要)。