2013-06-13 84 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