2013-06-13 81 views
0
protected override void OnStart(string[] args) 
     { 
      try 
      { 
       t.Enabled = true; 
       t.Interval = 10000; //60 * 24; 
       t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed); 
      } 
      catch (Exception ex) 
      { 
       writeErrorToFile(ex.Message + " -- (OnStart) --"); 
      } 
     } 

這是我的onstart方法。我是製作Windows服務的新手。你能解釋一下instart方法裏面的代碼嗎?當我使用Google時,我無法得到正確的答案。Windows服務超時過期

下面是從OnStart方法

private void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
     { 
      try 
      { 
       // Read Data from Excel 
       OleDbConnection conn = new OleDbConnection(); 
       OleDbCommand cmd = new OleDbCommand(); 
       OleDbDataAdapter da = new OleDbDataAdapter(); 

       SqlCommand sm = new SqlCommand(); 
       string connString = ""; 
       string query = ""; 

       string strDt = DateTime.Now.ToString("dd_MM_yyyy"); 
       string strNewPath = @"E:\E-Cata_Stock_Report\ALL_INDIA_STOCK_REPORT_" + strDt + ".xls"; //Server.MapPath(@"C:\E-Cata_Stock_Report\ALL_INDIA_STOCK_REPORT.xls"); // ///" + strFileName + strFileType); 


       connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strNewPath + 
          ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\""; 


       query = "SELECT * FROM [SPARE_LIST$]"; 
       conn = new OleDbConnection(connString); 
       //Open connection 
       if (conn.State == ConnectionState.Open) 
        conn.Close(); 
       conn.Open(); 
       //Create the command object 
       cmd = new OleDbCommand(query, conn); 
       da = new OleDbDataAdapter(cmd); 
       dsExcel = new DataSet(); 

       try 
       { 
        da.Fill(dsExcel); 
       } 
       catch (Exception ex) 
       { 
        writeErrorToFile(ex.Message + " -- (t_Elapsed -> Keep valid excel file which you want to upload..) --"); 
        //lblMsg.Text = "Keep valid excel file which you want to upload.."; 
        return; 
       } 

       //lblMsg.Text = "Data retrieved successfully! Total Records:" + dsExcel.Tables[0].Rows.Count; 
       da.Dispose(); 
       conn.Close(); 
       conn.Dispose(); 

       if (dsExcel.Tables[0].Columns.Count != 32) 
       { 
        writeErrorToFile("Please check the Excel Sheet.. It contains more or less columns.."); 
        return; 
       } 

       if (dsExcel.Tables[0].Rows.Count > 0) 
       { 
        for (int i = 0; i < dsExcel.Tables[0].Rows.Count; i++) 
         File.AppendAllText(@"C:\E-Cata_Itms.txt", dsExcel.Tables[0].Rows[i][0].ToString() + " \n\r"+i+i); 
       } 

       //====================================================================================================== 

       string con = getConn_string(); 
       SqlConnection sn = new SqlConnection(con); 

       if (sn.State == ConnectionState.Open) 
        sn.Close(); 
       sn.Open(); 
       SqlTransaction transaction = sn.BeginTransaction(); 

       try 
       { 
        for (int j = 4; j < dsExcel.Tables[0].Rows.Count; j++) // for rows 
        { 
         for (int i = 2; i < 32; i++) //for coloumns 
         { 
          sm = new SqlCommand(); 
          sm.Transaction = transaction; 
          sm.CommandText = "whItmItemwise_upload_update"; 
          sm.Connection = sn; 

          sm.CommandType = CommandType.StoredProcedure; 
          sm.Parameters.AddWithValue("@whItm_wh_code", dsExcel.Tables[0].Rows[3][i].ToString().Trim()); 
          sm.Parameters.AddWithValue("@whItm_item_code", dsExcel.Tables[0].Rows[j][0].ToString().Trim()); 

          try 
          { 
           // open stock quantity 
           decimal op_qty = (dsExcel.Tables[0].Rows[j][i].ToString().Trim() == 
                   "") 
                    ? Convert.ToDecimal(0.0) 
                    : Convert.ToDecimal(
                     dsExcel.Tables[0].Rows[j][i].ToString().Trim 
                      ()); 

           sm.Parameters.AddWithValue("@whItm_OP_STK_Qty", op_qty); 
          } 
          catch (Exception ex) 
          { 
           writeErrorToFile(ex.Message + " -- (t_Elapsed -> Enter valid Open stock quantity..) --"+i); 
           return; 
          } 

          sm.Parameters.AddWithValue("@whItm_Creation_DT", DateTime.Now.ToString("yyyy/MM/dd")); 
          //sm.Parameters.AddWithValue("@whItm_Created_By", ""); 
          //sm.Parameters.AddWithValue("@His_whItm_Modify_Del_DT", DateTime.Now.ToString("yyyy/MM/dd")); 
          //sm.Parameters.AddWithValue("@His_whItm_Modify_Del_By", ""); 

          try 
          { 
           int x = sm.ExecuteNonQuery(); 
          } 
          catch (Exception ex) 
          { 
           System.Text.StringBuilder str_Upload = new System.Text.StringBuilder(); 
           str_Upload.Append(dsExcel.Tables[0].Rows[3][i].ToString().Trim() + ","); 
           str_Upload.Append(dsExcel.Tables[0].Rows[j][0].ToString().Trim() + ","); 
           str_Upload.Append(ex.Message.Replace(',', '-') + ","); 
           str_Upload.Append(DateTime.Now.ToString("dd/MM/yyyy") + ","); 

           File.AppendAllText(@"C:\E-Cata_Error" + ".csv", str_Upload.ToString()); 
          } 

          sm.Parameters.Clear(); 
         } 
        } 

        // Update stock from WH master to Item Master 
        SqlCommand sm2 = new SqlCommand(); 
        sm2.Transaction = transaction; 
        sm2.CommandText = "Stock_Update_from_WH_to_Item_master"; 
        sm2.Connection = sn; 
        sm2.CommandType = CommandType.StoredProcedure; 
        sm2.Parameters.AddWithValue("@Item_Code", ""); 
        sm2.ExecuteNonQuery(); 

        transaction.Commit(); 
        sm2.Dispose(); 
        MyNewService iyu = new MyNewService(); 
        iyu.Stop(); 
       } 
       catch (Exception ex) 
       { 
        transaction.Rollback(); 

        writeErrorToFile(ex.Message+"abcd"); 
        return; 
       } 
       finally 
       { 
        sm.Dispose(); 
        transaction.Dispose(); 
        sn.Close(); 
        sn.Dispose(); 
       } 

       //try 
       //{ 
       // // delete uploaded file 
       // File.Delete(strNewPath); 
       //} 
       //catch (Exception) 
       //{ 
       //} 
      } 
      catch (Exception ex) 
      { 
       writeErrorToFile(ex.Message + " -- (t_Elapsed) --"+"xyz"); 
      } 
     } 
+0

這應該工作,因爲計時器已過時事件應發生在線程池線程中。你如何設定你的計時器? – zmbq

+0

@zmbq:我真的不知道如何在onstart中編寫代碼。你能解釋一下onstart中的代碼嗎? – Ankur

+0

問題的標題很奇怪 - 你開始服務時是否遇到錯誤,或者只是想知道它在做什麼? –

回答

1

Windows服務必須從ServiceBase類繼承調用的方法。它具有我們需要在服務類中重寫的OnStart和OnStop虛擬方法。 在你的代碼中,當windows服務啓動時,OnStart方法被調用。在這種方法中,計時器已啓用並將間隔設置爲10秒。定時器時間間隔始終以毫秒爲單位設置,這就是爲什麼值爲10000.過了10秒後,在Elapsed事件中訂閱的方法被觸發,在這種情況下,觸發了t_Elapsed方法。
請參閱以下文章以在管理的Windows服務中託管wcf服務。 http://msdn.microsoft.com/en-us/library/ms733069.aspx