C# Windows服务未连接到数据库
我有一个windows服务。在向外部客户端发送soap消息之前,它每18秒连接并检查一次我的数据库。 我已经成功地在我的计算机上安装了该服务,但它没有做任何特别的事情,也没有用任何错误填充我的服务器日志 我怎样才能找出哪里出了问题 已更新C# Windows服务未连接到数据库,c#,windows,c#-4.0,windows-services,timer,C#,Windows,C# 4.0,Windows Services,Timer,我有一个windows服务。在向外部客户端发送soap消息之前,它每18秒连接并检查一次我的数据库。 我已经成功地在我的计算机上安装了该服务,但它没有做任何特别的事情,也没有用任何错误填充我的服务器日志 我怎样才能找出哪里出了问题 已更新 protected override void OnStart(string[] args) { timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); time
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");
}
MyRunAPP()
是我通过存储过程连接到数据库的地方
任何对我的问题的洞察都将是伟大的
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(“异常”);
投掷;
}
}根据建议编辑了我的例外情况 捕获(例外情况除外) {
eventLog1.WriteEntry(ex.Message);
eventLog1.WriteEntry(ex.StackTrace);
throw;
}
我怀疑,要从社区获得任何见解,您必须共享
RunApp
的内容,因为这就是故障发生的地方。RunApp
中的异常可能会导致您的日志无法写入…那么您是否在事件日志中收到这两条消息?如果是,您发布了错误的代码。如果不是,您从未启动服务或你发布了错误的代码。为什么不在catch语句中添加一行来记录错误呢?因此你正在吞咽任何异常。我想你刚刚了解了为什么这是一个非常糟糕的主意。至少在事件日志中输入异常详细信息。我将对服务正在运行的用户进行粗略的猜测,因为该用户没有访问数据库的权限当然,您需要记录异常消息(ex.message)中的数据,这将告诉您发生了什么错误,还需要记录异常的堆栈跟踪(“ex.StackTrace”),这将告诉您发生错误的位置。