我有一个网站,它接受用户输入,处理它,然后将记录添加到sql表。
本周末我遇到了一个问题,SQL服务器正在执行操作,并且用户的处理时间非常长,最后会有超时响应。最重要的是,处理后的数据丢失了。
最终,我想知道是否有可能以某种方式将这些已处理的数据保存在某处,直到SQL再次运行,然后添加记录?
我想这可能是通过Web服务完成的?或者可以在后面的asp.net代码中完成?
答案 0 :(得分:1)
当我们有一台负责处理传入传真并将其存储在数据库中的传真服务器时,我们处理了这种情况,但数据库不太可靠。
在这种情况下,如果我们无法访问SQL Server,我们会将数据序列化到磁盘上的队列,并在应用程序中设置一个标志,指示SQL Server处于脱机状态。设置此标志后,任何后续提交都将存储在磁盘队列中。
然后我们会定期检查SQL Server以查看它是否已备份,如果是,我们将处理队列中的每个文件,然后关闭离线标志。
在ASP.Net中,一旦SQL Server脱机,您就可以启动一个监视SQL Server的线程,当它重新联机时,执行此处理。
但是,在您描述的情况下,听起来有人启动了一个事务并且没有完成它或者正在进行维护操作(DBCC,备份)。
如果这种情况经常发生,您可能需要设置比预期的正常持续时间略长的CommandTimeout(比如说双倍),如果操作没有在该时间范围内完成,则告诉用户有一个问题或进入缓存模式。