asp.net - 使用计划任务运行 ASPX 页面时出现问题

标签 asp.net iis internet-explorer-7 scheduled-tasks webforms

我设置了一个计划任务,在 IE7 中每 3 分钟运行一次 Scan.aspx。 Scan.aspx 按顺序从 10 个文件中读取数据。这些文件不断更新。文件中的值将插入到数据库中。

偶尔,读取的值会被截断或扭曲。例如,如果文件中的值为“Hello World”,则数据库中将出现“Hello W”、“Hel”等随机条目。这些条目上的时间戳看起来完全是随机的。有时凌晨 1:00,有时凌晨 3:30。有些晚上,这种情况根本不会发生。

当我调试代码时,无法重现此问题。所以我知道在“正常”情况下,代码可以正确执行。

更新:

下面是读取文本文件的 aspx 代码隐藏(在 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

您知道为什么这可能会在一天中多次运行(通过计划任务)时导致问题吗?

最佳答案

首先在 ASP.NET 解决方案中实现 Log4Net 等 Logger,并在 Scan.aspx 中实现 Log 方法入口和导出点以及更新数据库的方法。这有可能提供一些正在发生的事情的线索。您还应该检查系统事件日志,看看是否有任何其他事件与失败的数据库条目相关。

对于这种情况,ASP.NET 并不是最好的选择,尤其是与 Windows 计划任务配合使用时;这不是一个稳健的设计。更强大的系统将在 Windows 服务应用程序内的计时器上运行。您用于读取文件和更新数据库的代码可以移植。如果您有权访问服务器并且可以安装 Windows 服务,请确保您也将日志记录添加到 Windows 服务!

请务必阅读下面的如何调试

  1. Windows Service Applications intro on MSDN :有更多链接:
  2. 如何:创建 Windows 服务
  3. 如何:安装和卸载服务
  4. 如何:启动服务
  5. 如何:调试 Windows 服务应用程序]
  6. 演练:创建 Windows 服务 组件设计器中的应用
  7. 如何:将安装程序添加到您的服务应用程序

关于您对有时在凌晨 1 点和 3.30 点出现的明显随机条目的后续评论:您应该:

  1. 在发生这些情况时调查网站的 IIS 日志,并找出当时访问(访问)页面的内容。
  2. 检查访问您的 aspx 页面的服务器上是否有索引服务。
  3. 检查是否安装了防病毒软件,并确定该软件是否正在访问您的 aspx 页面或影响 Asp.Net 缓存;这可能会导致编译问题,例如 aspnet 缓存中的 aspnet 页面上的文件锁定; (针对 aspnet 网站而不是 aspnet Web 应用程序的场景)可能会产生奇怪的行为。
  4. 查明截断的条目是否与文件更新时间一致:将数据库条目时间戳或记录器时间戳与文件更新时间交叉引用。
  5. 更新您的记录器以记录正在读取的文件的全部内容,以验证您没有出现“垃圾输入 > 垃圾输出”情况。运行一晚,小心服务器上的磁盘空间。
  6. 查明您的网络应用程序运行所在的应用程序池何时被回收,并将其与截断条目的时间进行交叉引用;您只能通过 ASP.NET 运行状况监控使用 web.config 来执行此操作。

你的代码是用“try catch”编写的,它会隐藏错误。如果您不打算对捕获的错误做一些有用的事情,那么就不要捕获它。在代码中处理边缘情况,而不是 try catch。 See this try-catch question on this site .

关于asp.net - 使用计划任务运行 ASPX 页面时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13037550/

相关文章:

javascript - 不同浏览器中的空白字符正则表达式行为

Asp.net MVC 验证动态表单

asp.net - 验证移动应用程序的 Web 服务

c# - 使用文本框在另一页上编辑 ListView 行

c# - 在 File.Copy 之后文件正在被另一个进程使用

c# - 在 Azure IIS 上的 C# Web 应用程序中使用客户端证书

mysql - ASP.NET 忽略潜在危险请求的异常

IIS 将 ASP.NET 5 BETA 8 站点部署到 IIS 会出现 HTTP 错误 500.19 - 内部服务器错误

IE7 中的 jquery 幻灯片问题

html - IE 7 中的背景图像问题