我有一个计划任务设置为在IE7中每3分钟运行一次Scan.aspx。 Scan.aspx按顺序从10个文件中读取数据。这些文件不断更新。文件中的值将插入数据库中。
偶尔,读取的值会被截断或失真。例如,如果文件中的值为“Hello World”,则数据库中将包含“Hello W”,“Hel”等随机条目。这些条目的时间戳显示为完全随机。有时在凌晨1点,有时在凌晨3:30。有些夜晚,这根本不会发生。
调试代码时,我无法重现此问题。所以我知道在“normal”情况下,代码正确执行。
更新
这是用于读取文本文件的aspx codebehind(在Page_Load中)(这是为10个文本文件中的每一个调用的):
Dim filename As String = location
If File.Exists(filename) Then
Using MyParser As New FileIO.TextFieldParser(filename)
MyParser.TextFieldType = FileIO.FieldType.Delimited
MyParser.SetDelimiters("~")
Dim currentrow As String()
Dim valueA, valueB As String
While Not MyParser.EndOfData
Try
currentrow = MyParser.ReadFields()
valueA= currentrow(0).ToUpper
valueB = currentrow(1).ToUpper
//insert values as record into DB if does not exist already
Catch ex As Exception
End Try
End While
End Using
End If
为什么在全天多次运行(通过预定任务)时可能会导致问题的任何想法?
答案 0 :(得分:3)
首先在ASP.NET解决方案中实现Log4Net等Logger,在Scan.aspx中实现Log方法的入口和出口点,以及更新数据库的方法。这可能会提供一些正在发生的事情的暗示。您还应该检查系统事件日志,以查看是否有任何其他事件与失败的数据库条目相关联。
ASP.NET不是这种情况的最佳选择,尤其是在与Windows计划任务配对时;这不是一个强大的设计。一个更强大的系统将运行在Windows服务应用程序内的计时器上。您可以移植用于读取文件和更新到DB的代码。如果您可以访问服务器并且可以安装Windows服务,请确保您也将日志记录添加到Windows服务中!
请务必阅读下面的“如何调试”
关于有时出现在凌晨1点和凌晨3点30分的明显随机条目的后续评论:您应该:
你的代码是用'try catch'编写的,它会掩盖错误。如果您不打算对捕获的错误做一些有用的事情,那么就不要抓住它。在代码中处理边缘情况,而不是try catch。 See this try-catch question on this site