2012-10-23 2 views
2

IE7에서 3 분마다 Scan.aspx를 실행하도록 예약 된 작업을 설정했습니다. Scan.aspx는 10 개의 파일에서 데이터를 순서대로 읽습니다. 이러한 파일은 지속적으로 업데이트됩니다. 파일의 값이 데이터베이스에 삽입됩니다.예약 된 작업을 사용하여 ASPX 페이지를 실행하는 문제

산발적으로 읽히는 값이 잘 리거나 왜곡됩니다. 예를 들어 파일의 값이 "Hello World"이면 "Hello W", "Hel"등과 같은 임의 항목이 데이터베이스에 있습니다. 이 항목의 타임 스탬프는 완전히 무작위로 나타납니다. 때로는 오전 1시에, 때로는 오전 3시 30 분에. 그리고 몇몇 밤, 이것은 전혀 일어나지 않습니다.

코드를 디버깅 할 때이 문제를 재현 할 수 없습니다. 그래서 나는 "보통" 상황을 알고, 코드가 올바르게 실행됩니다.

UPDATE :

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 

어떤 아이디어 왜이 : 여기

을 (를 Page_Load에서) 영문 코드 숨김 (이것은 10 텍스트 파일의 각 호출됩니다) 텍스트 파일을 읽을 수있다 하루 중 여러 번 (예약 된 작업을 통해) 실행할 때 문제가 발생할 수 있습니까?

답변

3

먼저 ASP.NET 솔루션에 Log4Net과 같은 로거를 구현하고 Scan.aspx에서 메서드 입력과 종료 지점을 로그하고 DB 업데이트 방법을 구현하십시오. 무슨 일이 일어나고 있는지 알 수있는 기회가 있습니다. 시스템 이벤트 로그를 검사하여 다른 이벤트가 실패한 DB 항목과 연관되어 있는지 확인해야합니다.

ASP.NET은 특히 Windows 예약 된 작업과 쌍을 이루는 경우이 시나리오에서 가장 좋은 것은 아닙니다. 이것은 강력한 디자인이 아닙니다. 더 강력한 시스템은 Windows-Service-Application 내부의 타이머에서 실행됩니다. 파일을 읽고 DB로 업데이트하는 코드를 이식 할 수 있습니다. 서버에 대한 액세스 권한이 있고 Windows 서비스를 설치할 수있는 경우 Windows 서비스에도 로깅을 추가해야합니다.

당신이

  1. Windows Service Applications intro on MSDN 아래 디버깅하는 방법 읽기 확인은 :에 추가 링크가 있습니다 :
  2. 방법 :
  3. 방법 설치 및 제거 서비스 : Windows 서비스하는 방법
  4. 만들기 : 서비스 시작
  5. 방법 : Windows 서비스 응용 프로그램 디버그
  6. 연습 : Windows 서비스 만들기 0 구성 요소 디자이너에서응용 프로그램
  7. 하는 방법
  8. : 때때로 오전 1시와 오전 3시 반에서 발생하는 명백한 임의 항목에 대한 의견 당신의 후속에 대한 귀하의 서비스 응용 프로그램

에 설치를 추가 : 수행해야합니다

  1. 이러한 경우 사이트에 대한 IIS 로그를 조사하고 그 당시 페이지에 무엇이 방문했는지 확인하십시오.
  2. aspx 페이지를 방문하는 서버에 색인 서비스가 있는지 확인하십시오.
  3. 안티 바이러스 소프트웨어가 설치되어 있는지 확인하고 이것이 aspx 페이지를 방문하고 있거나 Asp.Net 캐시에 영향을 미치는지 확인하십시오. aspnet 캐시의 aspnet 페이지에서 파일 잠금과 같은 컴파일 문제가 발생할 수 있습니다. (이상 aspnet 웹 응용 프로그램과 반대 aspnet 웹 사이트에 대한 시나리오) 이상한 행동을 줄 수 있습니다.
  4. 잘린 항목이 파일이 업데이트되는 시간과 일치하는지 확인하십시오. db 항목의 타임 스탬프 또는 로거 타임 스탬프와 파일 업데이트 시간을 상호 참조하십시오.
  5. 'junk-in> junk-out'시나리오가 없는지 확인하기 위해 읽는 파일의 전체 내용을 기록하도록 로거를 업데이트하십시오. 하룻밤 동안이 작업을 실행하여 서버의 디스크 공간에주의하십시오.
  6. 웹 앱이 실행되는 앱 풀이 재활용되고 잘라내 진 항목의 시간과 함께 상호 참조하십시오. ASP.NET 상태 모니터링을 통해서만 web.config를 사용하여이 작업을 수행 할 수 있습니다.

코드는 오류를 묻을 '시도 잡기'로 작성됩니다. 잡힌 오류에 유용한 것을하지 않으려면 잡으려고하지 마십시오. try catch가 아닌 코드에서 엣지 케이스를 처리하십시오. See this try-catch question on this site.

+0

감사합니다. 나는 너의 제안을 시도 할 것이다. 불행하게도, 내가 설정하지 않은 순간에이 기존 디자인을 지원합니다. 시간이 허락한다면, 나는 이것을 Windows Service로 구현할 것이다. 나는 그것이 더 강력 해 보인다는 것에 동의한다. – user1620141

+0

로깅을 추가하고 문제가 데이터베이스 부분이 아니라 텍스트 파일을 실제로 읽은 것으로 나타났습니다. 코드가있는 업데이트 된 질문을 참조하십시오. – user1620141

관련 문제