2012-04-26 6 views
0

Windows 서비스가 있습니다. 그것은 외부 클라이언트에게 비누 메시지를 보내기 전에 18 년마다 데이터베이스를 연결하고 점검합니다. 내 컴퓨터에 서비스를 성공적으로 설치했지만 특정 작업을 수행하지 않고 서버 로그에 오류가 발생하지 않습니다.Windows 서비스가 데이터베이스에 연결하지 않습니다.

어디서 잘못되었는지 어떻게 알 수 있습니까?

는 내가 저장 프로 시저를 통해 데이터베이스에 연결 한 경우 내 RunAPP()

protected override void OnStart(string[] args) 
    { 
     timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); 
     timer.Interval = 15000; 
     timer.Enabled = true; 
     timer.Start(); 
     eventLog1.WriteEntry("Windows Service 3 Started"); 
    } 

    protected override void OnStop() 
    { 
     eventLog1.WriteEntry("Windows Service 3 Stopped"); 

    } 

업데이트되었습니다.

내 문제에 대한 통찰력은 대단 할 것입니다.

private void RunApp() 
    { 

     p.Start(); 
     string connStr = ConfigurationManager.ConnectionStrings["bbsConnectionString"].ConnectionString; 
     try 
     { 
      SqlConnection Con = new SqlConnection(connStr); 
      Con.Open(); 
      SqlCommand cmd = new SqlCommand("AvailableChanges", Con); 
      cmd.CommandType = CommandType.StoredProcedure; 
      SqlParameter NewSysChangeVersionParam = new SqlParameter("@NewSysChangeVersion", SqlDbType.Int); 
      NewSysChangeVersion.Value = (object)NewSysChangeVersion ?? DBNull.Value; 
      NewSysChangeVersion.Direction = ParameterDirection.InputOutput; 
      NewSysChangeVersion.SqlDbType = SqlDbType.BigInt; 
      SqlDataReader sdr = cmd.ExecuteReader(); 
      int sdrreader = sdr.FieldCount; 
      InventoryPushSubscriptionRecord rec = new InventoryPushSubscriptionRecord(); 


      while (sdr.Read()) 
      { 

       inrec.InventoryPushSubscriptionId = sdr.GetInt32(0); 
       inrec.SysChangeVersion = sdr.IsDBNull(1) ? (long?)null : sdr.GetInt64(1); 
       inrec.InvDate = sdr.GetDateTime(2); 
       inrec.ResortId = sdr.GetInt32(3); 
       inrec.RoomType = sdr.GetString(4); 
       inrec.InvCount = sdr.GetInt32(5); 
       inrec.ResortName = sdr.GetString(6); 


       Int64 NewSysChangeVersion; 
       NewSysChangeVersion = Convert.ToInt64(rec.LastSysChangeVersion); 
       int ResortId; 
       ResortId = inrec.ResortId; 
       string RoomType; 
       RoomType = inrec.RoomType; 
       int avail = inrec.InvCount; 
       DateTime frodte = inrec.InvDate; 
       DateTime todte = inrec.InvDate; 
       int NoofRatePackages = sdrreader; 
       Int32 InventoryPushSubscriptionId; 
       InventoryPushSubscriptionId = inrec.InventoryPushSubscriptionId; 
       Int64 NewLastSysChangeVersion; 
       NewLastSysChangeVersion = Convert.ToInt64(inrec.SysChangeVersion); 
       if (NewSysChangeVersion != null) 
       { 
        sendUpdate(NewSysChangeVersion, ResortId, RoomType, avail, frodte, todte, NoofRatePackages, InventoryPushSubscriptionId, NewLastSysChangeVersion); 
       } 
      } 

      // sdr.Close(); 
      // sdr.Dispose(); 

     } 

     catch (Exception ex) 
     { 

업데이트 eventLog1.WriteEntry ("예외"); 던졌습니다; } }

+1

나는 실패가 발생하는 경우 그 이후 즉, 당신이 RunApp''의 컨텐츠를 공유해야 지역 사회에서 어떤 통찰력을 얻을 생각한다. 'RunApp'의 예외로 인해 로그가 쓰여지지 않을 수도 있습니다 ... –

+0

그래서 두 메시지를 이벤트 로그에 가져 옵니까? 그렇다면 잘못된 코드를 올렸습니다. 그렇지 않다면 서비스를 시작하지 않았거나 잘못된 코드를 올렸습니다. –

+0

좋아,하지만 내 질문에 내 코드를 올린 마지막 시간은 너무 길었고 아무도 그것을 스크롤하지 말라고 들었습니다 .... 코드를 포함하도록 내 질문을 편집합니다. @ 토니 홉킨슨 내 이벤트 로그에 표시됩니다. "Windows 서비스 3 시작, 실행중인 응용 프로그램"및 그 이후 아무것도. – user1270384

답변

0

편집 한 나의 예외.

캐치 (예외 예) {

  eventLog1.WriteEntry(ex.Message); 
      eventLog1.WriteEntry(ex.StackTrace); 
      throw; 

     } 
관련 문제