2012-10-23 28 views
2

我有一個計劃任務設置爲在IE7中每隔3分鐘運行Scan.aspx。 Scan.aspx按順序從10個文件中讀取數據。這些文件不斷更新。文件中的值被插入到數據庫中。零星地,被讀取的值被截斷或失真。例如,如果文件中的值是「Hello World」,則會在數據庫中包含「Hello W」,「Hel」等隨機條目。這些條目上的時間戳完全是隨機的。有時在凌晨1:00,有時在凌晨3:30。有些晚上,這根本不會發生。使用計劃任務運行ASPX頁面問題

我在調試代碼時無法重現此問題。所以我知道「正常」的情況下,代碼正確執行。

UPDATE:

這裏是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 

任何想法,爲什麼這全天運行多次(通過計劃任務)可能會導致問題?

回答

3

首先在您的ASP.NET解決方案中實現一個記錄器(如Log4Net),並在Scan.aspx中記錄Log方法的入口和出口點以及更新數據庫的方法。這有可能提供一些有關正在發生的事情的暗示。您還應該檢查系統事件日誌以查看是否有其他事件與失敗的數據庫條目相關聯。

對於這種情況,ASP.NET並不是最好的選擇,特別是與Windows計劃任務配對時;這不是一個強大的設計。一個更健壯的系統將運行在Windows服務應用程序中的計時器上。用於讀取文件和更新到數據庫的代碼可以通過移植。如果您有權訪問服務器並可以安裝Windows服務,請確保您還將日誌記錄添加到Windows服務!

請務必閱讀如何調試下面

  1. Windows Service Applications intro on MSDN:有進一步鏈接:
  2. 如何創建Windows服務
  3. 如何安裝和卸載服務
  4. 如何:啓動服務
  5. 如何:調試Windows服務應用程序
  6. 演練:創建Windows服務0在組件設計應用
  7. 如何添加安裝人員服務應用程序

關於你的跟進有關,有時發生在凌晨1點,並在上午03點半隨機明顯項註釋:你應該:

  1. 調查網站的IIS日誌,當這些發生時,並找出什麼打(訪問)該頁在當時。
  2. 檢查在訪問您的aspx頁面的服務器上是否有索引服務。
  3. 檢查是否安裝了防病毒軟件,並確定這是否訪問您的aspx頁面或影響Asp.Net緩存;這可能會導致編譯問題,如aspnet緩存中的aspnet頁面上的文件鎖定; (aspnet網站的場景,而不是aspnet web應用程序),這可能會產生奇怪的行爲。
  4. 找出截斷條目是否與更新文件的時間一致:交叉引用您的數據庫條目時間戳或記錄器時間戳與文件更新的時間。
  5. 更新您的記錄器以記錄正在讀取的文件的全部內容,以確認您沒有「垃圾進入垃圾」情形。通過運行一晚,請小心服務器上的磁盤空間。
  6. 找出您的Web應用程序運行的應用程序池何時被回收,並將其與截斷條目的時間交叉引用;您只能通過ASP.NET健康監控與web.config配合使用。

你的代碼是用一個'try catch'來寫的,它會掩蓋錯誤。如果你不打算對你發現的錯誤做一些有用的事情,那麼不要抓住它。在代碼中處理邊緣案例,而不是嘗試捕獲。 See this try-catch question on this site

+0

謝謝你的所有信息。我會嘗試你的建議。不幸的是,在我沒有設置的時刻,我支持這個現有的設計。如果時間允許,我會考慮使用Windows服務來實現這一點。我同意,這似乎更強大。 – user1620141

+0

我添加了日誌並注意到問題不在數據庫部分,而是在文本文件的實際讀取中。請使用代碼查看我更新的問題。 – user1620141