1.新建一个Windows应用程序winserver,删除里面的form窗体;
2.在winserver应用程序中添加Windows服务MyServer.cs;
3.在MyServer设计模式中添加控件Eventlog,在类cs中完成如下代码:
private static Timer timer = new Timer();
private DateTime settingTime;
public MyServer()
{
InitializeComponent();
if (!System.Diagnostics.EventLog.SourceExists("MySource"))
{
System.Diagnostics.EventLog.CreateEventSource(
"MySource", "MyNewLog");
}
eventLog1.Source = "MySource";
eventLog1.Log = "MyNewLog";
eventLog1.WriteEntry("服务开始。");
}
protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
InitializeTimer();
}
protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
timer.Stop();
eventLog1.WriteEntry("服务正常终止。");
}
private void InitializeTimer()
{
eventLog1.WriteEntry("初始化定时器。。。");
timer.Interval = 60000 * Convert.ToDouble(ConfigurationSettings.AppSettings["IntervalMinutes"]);
SetNotifyTime(DateTime.Now);
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.AutoReset = true;
timer.Enabled = true;
}
private void SetNotifyTime(DateTime dt)
{
string tag = ConfigurationSettings.AppSettings["StartJobTime"];
string[] t = tag.Split(':');
int hour = int.Parse(t[0]);
int min = int.Parse(t[1]);
settingTime = new DateTime(dt.Year, dt.Month, dt.Day, hour, min, 0);
if (settingTime < DateTime.Now)
{
settingTime = settingTime.AddDays(1);
eventLog1.WriteEntry("下一次执行日期:" + settingTime);
}
}
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
if (settingTime.ToShortDateString() == DateTime.Now.ToShortDateString()
&& settingTime.Hour == DateTime.Now.Hour
&& settingTime.Minute == DateTime.Now.Minute)
{
try
{
RunCommands();
}
finally
{
SetNotifyTime(DateTime.Now.AddDays(1));
eventLog1.WriteEntry("下一次执行日期:" + settingTime);
}
}
}
private void RunCommands()
{
try
{
eventLog1.WriteEntry("调用服务。。");
/*---------------专项层WebService调用开始------------- */
localhost.WebService objJob = new localhost.WebService();
objJob.Timeout = 20 * 60000;
Interface(objJob);
eventLog1.WriteEntry("结束!");
}
catch (Exception ex)
{
eventLog1.WriteEntry(ex.Message);
}
}
void Interface(localhost.WebService objJob)
{
try
{
objJob.Dtent_to_users();
eventLog1.WriteEntry("数据进入bxusers相关表成功!");
}
catch (Exception ex)
{
eventLog1.WriteEntry(ex.Message);
}
}
4.配置app.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="XCWL_WindowsApplication.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<appSettings>
<add key="IntervalMinutes" value="1" />
<add key="StartJobTime" value="16:28" />
</appSettings>
<applicationSettings>
<MyServer.Properties.Settings>
<setting name="MyServer_localhost_WebService"
serializeAs="String">
<value>http://localhost:8081/WebServer/LocalService.asmx</value>
</setting>
</MyServer.Properties.Settings>
</applicationSettings>
</configuration>
5. 在Program.cs中改写main程序:
static void Main()
{
ServiceBase[] Service = new ServiceBase[] { new Service() };
ServiceBase.Run(Service);
}
6.在winserver中添加web引用http://localhost:8081/WebServer/LocalService.asmx
7.点MyServer设计器,右键选择添加-安装程序类,生成ProjectInstaller.cs
8.在解决方案中,
a.右键解决方案选择添加- 新建项目- 其它项目类型下(安装和部署)-选择安装项目,命名为setup1;
b.右键setup1--添加--项目输出-默认主输出-确认;
c.右键setup1--添加--视图--自定义操作;
d.在生成的"自定义操作"页面,右键“自定义操作”添加自定义操作--确认-确认;
e.右键解决方案--属性--配置属性(配置),在右边setup1和winserver选项中选中生成复选框;
f.生成解决方案,安装程序即生成;
浙公网安备 33010602011771号