2011-03-28 70 views
-1
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 
using System.Data.SqlClient; 
using System.IO; 
using System.Net; 
using System.Diagnostics; 
using System.Configuration; 
using System.Collections; 
using System.Timers; 
using System.Text.RegularExpressions; 
using System.Globalization; 
using System.Net.Mail; 


namespace VSATStatusReader 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //Modified by Reema for generating log in table and trigger mail on success or failure of this utility on 16-feb-2011. 
       try 
       { 
        InsertIntoJobLogTable("Utility Started", "S"); 
        UtilityMainFunction(); 
       } 
       catch (Exception ex) 
       { 
        InsertIntoJobLogTable("Error on returning from UtilityMainFunction function: '" + ex.Message + "' ", "E"); 
        UtilityRunMailToProMonSys("0", "'" + ex.Message + "'", "", ""); 
       } 
     } 

     public static void UtilityMainFunction() 
     { 
      DataSet ds; 
      string IP = ""; 

      ds = new DataSet(); 

      try 
      { 
       ds = getDataSet("select gateway_ip as IP from shannonnew..gateway_info").Copy(); 

       foreach (DataRow dRow in ds.Tables[0].Rows) 
       { 
        IP = dRow["IP"].ToString(); 

        CreateRunBatchFile(IP); 

        string[] DNCCfileEntries = Directory.GetFiles("c:/VSATStatus/VSATStatusFiles"); 
        string connString = getConnString(); 
        SqlConnection myDbConnection = new SqlConnection(connString); 
        myDbConnection.Open(); 

        foreach (string fileName in DNCCfileEntries) 
        { 
         FileStream file = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Read); 

         StreamReader sr = new StreamReader(file); 

         ArrayList finalWordList; 

         string s = sr.ReadToEnd(); 
         string[] lines = Regex.Split(s, "\r\n"); 

         foreach (string line in lines) 
         { 
          string formatedLine = line.Replace("iso.3.6.1.4.1.303.3.3.19.6.3.25.1.3.", ""); 
          string[] words = formatedLine.Split(' '); 
          finalWordList = new ArrayList(); 
          if (words[0].ToString() != "") 
          { 
           finalWordList.Add(words[0]); 
           finalWordList.Add(words[1]); 

           //Database Insert Code here 
           if (line.Trim() != "") 
           { 
            string strCmd = "Insert into ipgw_evp (Serial_No, VSAT_Status, Gateway_IP) values ('" + finalWordList[0] + "', '" + finalWordList[1] + "', '" + IP + "')"; 
            SqlCommand command = new SqlCommand(strCmd, myDbConnection); 
            command.ExecuteNonQuery(); 
           } 
          } 
         } 
         sr.Close(); 
         file.Close(); 
        } 
        myDbConnection.Close(); 
       } 
       InsertIntoJobLogTable("Utility Ended", "C"); 
       //UtilityRunMailToProMonSys("1", "success", ""); 
      } 
      catch (Exception ex) 
      { 
       InsertIntoJobLogTable("Error in UtilityMainFunction:'" + ex.Message + "' ", "F"); 
       UtilityRunMailToProMonSys("0", "'" + ex.StackTrace.ToString() + "'", "'" + IP + "'", "'" + ex.Message + "'"); 
       Console.WriteLine("Exception Occurred :{0},{1}", ex.Message, ex.StackTrace.ToString()); 
      } 
     } 

     private static string getConnString() 
     { 
      string connectionProperties = ConfigurationSettings.AppSettings["ProMonSysConsoleString"]; 
      return connectionProperties; 
     } 

     public static void CreateRunBatchFile(string IP) 
     { 
      //change the path as required 
      string filepath = "c:/VSATStatus\\VSATStatus.bat"; 

      try 
      { 
       StreamWriter sw = File.CreateText(filepath); 

       sw.WriteLine("del C:\\VSATStatus\\VSATStatusFiles\\VSATStatus.txt"); 
       sw.WriteLine("@echo off"); 
       sw.WriteLine("Snmpwalk -v 1 -O q -c public " + IP + " 1.3.6.1.4.1.303.3.3.19.6.3.25.1.3 >>C:\\VSATStatus\\VSATStatusFiles\\VSATStatus.txt"); 
       sw.Close(); 

       Process p = null; 

       string targetDir; 
       targetDir = string.Format(@"C:\VSATStatus"); 
       p = new Process(); 
       p.StartInfo.WorkingDirectory = targetDir; 
       p.StartInfo.FileName = "VSATStatus.bat"; 
       p.StartInfo.Arguments = string.Format("C-Sharp Console application"); 
       p.StartInfo.CreateNoWindow = true; 
       p.Start(); 
       p.WaitForExit(); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Exception Occurred :{0},{1}", ex.Message, ex.StackTrace.ToString()); 
      } 
     } 

     public static DataSet getDataSet(string strCmd) 
     { 
      SqlCommand command; 
      SqlDataAdapter da; 
      DataSet ds; 

      string connString = getConnString(); 
      SqlConnection myDbConnection = new SqlConnection(connString); 
      myDbConnection.Open(); 

      command = new SqlCommand(strCmd, myDbConnection); 
      command.CommandType = CommandType.Text; 
      da = new SqlDataAdapter(command); 
      ds = new DataSet(); 
      da.Fill(ds); 

      myDbConnection.Close(); 

      return ds; 
     } 

     //changed by Reema for sending massage and stacktrace in mails. 
     public static void UtilityRunMailToProMonSys(string str, string stacktr, string IP, string error) 
     { 
      try 
      { 
       string msg = ""; 
       msg += "<BR>"; 
       if (str == "0") 
       { 
        msg += "VSATStatusReader Utillity fails."; 
        msg += "<BR>"; 
        msg += "<BR>Failed IP Gateway is : '" + IP + "' "; 
        msg += "<BR>"; 
        msg += "<BR>"; 
        msg += "Exception is : '" + error + "' "; 
        msg += "<BR>"; 
        msg += "<BR>"; 
        msg += "'" + stacktr + "'"; 
        msg += "<BR>"; 
       } 
       //else 
       //{ 
       // msg += "VSATStatusReader Utility run successfully. "; 
       //} 
       msg += "<BR>"; 
       msg += "<BR>Regards,"; 
       msg += "<BR>ProMonSys Admin"; 
       msg += "<BR>"; 
       var message = new MailMessage(ConfigurationSettings.AppSettings["DefaultEmail"], ConfigurationSettings.AppSettings["ToMail"]) 
       { 
        Subject = " ProMonSys VSATStatusReader Utility Status", 
        Body = msg, 
        IsBodyHtml = true 
       }; 

       var client = new SmtpClient(ConfigurationSettings.AppSettings["MailServer"]); 
       client.Send(message); 
      } 
      catch (Exception ex) 
      { 

      } 
     } 


     public static void InsertIntoJobLogTable(string Msg, string MsgType) 
     { 
      SqlCommand Cmd = new SqlCommand(); 
      SqlConnection Conn = new SqlConnection(ConfigurationSettings.AppSettings["ProMonSysConsoleString"]); 
      try 
      { 

       if (Msg.Length > 8000) 
       { 
        Msg = Msg.Substring(0, 7999); 
       } 
       else if (Msg.IndexOf("'") >= 0) 
       { 
        Msg = Msg.Replace("'", ""); 
       } 

       Cmd.Connection = Conn; 
       Cmd.CommandType = CommandType.StoredProcedure; 
       Cmd.CommandText = "Create_Job_Utility_Log_SP"; 
       Cmd.Parameters.Clear(); 
       Cmd.Parameters.Add("@vcJobName", "VSATStatusReader_Utility"); 
       Cmd.Parameters.Add("@vcModule", "ProMonSys"); 
       Cmd.Parameters.Add("@dtType", MsgType); 
       Cmd.Parameters.Add("@vcJobType", "U"); 
       Cmd.Parameters.Add("@vcDBUsed", "VSATStatusProgram, ProMonSys"); 
       Cmd.Parameters.Add("@vcJobStatus", Msg); 
       Conn.Open(); 
       Cmd.ExecuteNonQuery(); 
       Conn.Close(); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Exception Occurred :{0},{1}", ex.Message, ex.StackTrace.ToString()); 
      } 
      finally 
      { 
       Conn.Dispose(); 
       Cmd.Dispose(); 
      } 

     } 
    } 

    //public class MailHelper 
    //{ 
    // public static void SendMailMessage(string from, string to, string bcc, string cc, string subject, string body) 
    // { 
    //  MailMessage mMailMessage = new MailMessage(); 
    //  mMailMessage.From = new MailAddress(from); 
    //  mMailMessage.To.Add(new MailAddress(to)); 

    //  if ((bcc != null) && (bcc != string.Empty)) 
    //  { 
    //   mMailMessage.Bcc.Add(new MailAddress(bcc)); 
    //  } 
    //  if ((cc != null) && (cc != string.Empty)) 
    //  { 
    //   mMailMessage.CC.Add(new MailAddress(cc)); 
    //  } 
    //  mMailMessage.Subject = subject;    
    //  mMailMessage.Body = body; 

    //  mMailMessage.IsBodyHtml = true; 
    //  mMailMessage.Priority = MailPriority.Normal; 

    //  SmtpClient mSmtpClient = new SmtpClient(); 
    //  mSmtpClient.Send(mMailMessage); 
    // } 
    //} 


} 

这是我的代码..这个代码运行良好,我以前的服务器是在Windows 2008上配置的,但是当我想尝试在Windows 2003中运行此代码时,有时会运行但有时在 SYSTEM \ VSATStatus \ VSATStatusFiles \ VSATStatus.txt ' 被拒绝。 ''Windows IO错误

'':这是给此异常:

的例外是: '' 访问路径 ' C。 IO .__ Error.WinIOError(Int32 errorCode,String ma ybeFullPath)在 System.IO.FileStream.Init(字符串路径, 的FileMode模式,FileAccess的访问, 的Int32权利,布尔useRights, 文件共享份额,缓冲区大小的Int32, FileOptions选项, SECURITY_ATTRIBUTES secAttrs,字符串 MSGPATH,布尔bFromProxy )在 System.IO.FileStream..ctor(字符串 路径,的FileMode模式,FileAccess的 访问)在 VSATStatusReader.Program.UtilityMainFunction() 在 C:\的Inetpub \ wwwroot的\ VSATStatusReader \ VSATStatusReader \ Program.cs中: line 61''

回答

0

是否存在路径并且是否有权写入它?从例外检查您有wwwroot浮动事实检查您正在使用的服务帐户有写入权限C:\VSATStatus\VSATStatusFiles

+0

Ya此路径存在且VSATStatus文件夹具有写入权限。 – 2011-03-28 10:36:43

0

我相信这是因为正在使用文本文件。要么在调试/测试时没有正确关闭它。或者正在被另一个程序使用。

+0

此应用程序在生产服务器上运行,不在调试/测试。此文件仅用于此特定文件夹,并在上面我正确地关闭文件。 – 2011-03-28 10:43:04

+0

@Reema:如果这是一个可被多人访问的网站,那么当另一个人试图访问该文件时,该文件可能会被一个人使用。 – 2011-03-28 11:08:12

+0

1)所有IPGW的IP都从shannonnew..gateway_info获取。 2)为每个IPGW服务器启动一个循环。 3)在每个循环中,使用函数CreateRunBatchFile创建并执行批处理文件,如c:/ VSATStatus \\ VSATStatus.bat,其中包含使用snmpwalk.exe的简单SNMP命令,该文件保存在VSATStatus文件夹中,输出结果写入在VSATStatusFiles文件夹内有一个名为VSATStatus.txt的文本文件,它具有一个路径C:\\ VSATStatus \\ VSATStatusFiles \\ VSATStatus.txt。 – 2011-03-28 11:37:46