2013-06-13 6 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? Я не могу получить правильный ответ, когда я googled.Срок действия истекшего срока службы ОС 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 секунд запускается метод, подписанный в истекшем событии, в этом случае запускается t_Elapsed метод.
См. Следующую статью для размещения службы wcf в службе управляемых окон. http://msdn.microsoft.com/en-us/library/ms733069.aspx

Смежные вопросы