前段时间搞一个项目,调用SAP的接口获取数据,存储到本地数据库,每天晚上10点定时获取数据,使用了Windows server来完成,项目已经快结束,总结一下过程。因为在Windows server中调试不是很方便,首先在窗体程序写了调用接口保存到本地的代码,运行OK后再移植到Windows server中。
主要步骤如下
1. 创建window server程序
网上有很多案列,可以参考这个:https://www.cnblogs.com/xujie/p/5695673.html
2. 设置定时器
网上的定时器设置一般较死,定时刷新;
例如:https://www.cnblogs.com/goto/p/4172274.html
但是这样比较死,会重复执行,而且我的程序每次执时间很长,有20多分钟,
namespace WindowsService1
{
public partial class Service1 : ServiceBase
{
System.Timers.Timer timer;
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
timer = new System.Timers.Timer();
timer.Elapsed += new System.Timers.ElapsedEventHandler(startJob);
timer.Enabled = true;
// timer.Start();
this.writeLog("SAP客户端PRD员工信息数据同步服务:【服务启动】");
//数据同步服务,服务启动
}
protected override void OnStop()
{
this.timer.Enabled = false;
//数据同步服务,服务停止
this.writeLog("SAP客户端PRD员工信息数据同步服务:【服务停止】");
}
protected override void OnShutdown()
{
this.writeLog("SAP客户端PRD员工信息数据同步服务:【计算机关闭】");
}
public void startJob(object source, System.Timers.ElapsedEventArgs e)
{
timer.Interval = 5000; //每5秒监测一次
int hour = e.SignalTime.Hour;
int minute = e.SignalTime.Minute;
//到晚上10点10分时执行程序
if (hour==22 && minute==10)
{
timer.Interval = 3000000; //调整监测评率,
//this.writeLog("SAP客户端PRD员工信息数据同步服务BB:【计时更改为50分钟】"+ timer.Interval.ToString());
changeData(); //执行程序changeData()
changgeAge(); //执行程序changgeAge()
timer.Interval = 5000; /程序执行完成后,再每5秒监测一次
//this.writeLog("SAP客户端PRD员工信息数据同步服务CC:【计时更改为20秒】"+ timer.Interval.ToString());
}
}
}
3. 日志程序:
#region 记录日志
///<param name="msg" >
private void writeLog(string msg)
{
string path = AppDomain.CurrentDomain.BaseDirectory + "\\log.txt";
FileInfo file = new FileInfo(path);
if (!file.Exists)
{
FileStream fs;
fs = File.Create(path);
fs.Close();
}
using (FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write))
{
using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine(DateTime.Now.ToString() + " " + msg);
}
};
}
#endregion