Window 服务 (一)

如何创建Window Service

由于系统中有一个需求是当系统中任务中心有任务时,就通过一个windows service定时调用一个webservice将用户的待办任务通过ocs这个聊天工具发送给用户。所以最近的工作中接触到了windows service,这里就总结一下windows service是如何创建的。

在开始à运行àservices.msc就可以看到windows 服务了,或者控制面板à管理工具à服务,你也可以看到当前系统有那些服务了。 没错,接下来我们就要创建一个这样的服务,当你打开电脑后,就可以让这个服务启动去做些有用的事情。

打开vs20052003\2008开发工具,新建一个windows 服务项目OCSService,在这个项目里右键添加à新建项,首先我们需要添加一个windows 服务类 SendMessageToOcs.cs,一个安装程序类SendMessageToOcsInstall.cs,好,接下来我们谈谈如何实现这两个类。

Windows service 有个程序入口点就是Program.cs

using System.Collections.Generic;

using System.ServiceProcess;

using System.Text;

namespace OCSService

{

static class Program

{

/// <summary>

/// 应用程序的主入口点。

/// </summary>

static void Main()

{

ServiceBase[] ServicesToRun;

// 同一进程中可以运行多个用户服务。若要将

// 另一个服务添加到此进程中,请更改下行以

// 创建另一个服务对象。例如,

//

// ServicesToRun = new ServiceBase[] {new Service1(), new MySecondUserService()};

//

ServicesToRun = new ServiceBase[] { new SendMessageToOcs() };

ServiceBase.Run(ServicesToRun);

}

}

}

ServicesToRun = new ServiceBase[] { new SendMessageToOcs() };这行代码可能需要更改一下你NEW的那个windows service

创建的windows service的实现

partial class SendMessageToOcs : ServiceBase

{

private com.lab.ocs.CMPService ocs= new OCSService.com.lab.ocs.CMPService();//调用发送消息给ocswebservice

SqlConnection con = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["DbConnectionString"].ToString());

DataSet ds = new DataSet();

public SendMessageToOcs()

{

InitializeComponent();

System.Timers.Timer time = new System.Timers.Timer();

int seconds = int.Parse(System.Configuration.ConfigurationSettings.AppSettings["Intervals"].ToString());//时间周期存放在webconfig

time.Interval = seconds;//每个多少毫秒后给ocs发信息

time.AutoReset = true;

time.Enabled = true;

time.Elapsed+=new System.Timers.ElapsedEventHandler(time_Elapsed);

//定时触发一个事件如果不是定时触发,而是时刻都在运行可以使用protected override void //OnStart(string[] args),和protected override void OnStop()两个方法表示服务启动和结束事件

time.Start();

}

/// <summary>

/// 每隔一段时间后,就给用户发信息

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void time_Elapsed(object sender, ElapsedEventArgs e)

{

try

{

DataTable dtUsers = new DataTable();

dtUsers = this.GetUserlist();//获取所有用户

if (dtUsers.Rows.Count != 0)

{

int count = dtUsers.Rows.Count;

DataView dvToDos = new DataView();

DataView dvEletter = new DataView();

DataView dvPublicFile = new DataView();

DataView dvTotal = new DataView();

for (int k = 0; k < count; k++)

{

//取得此人所有的待办任务

ds.Tables.Clear();//先将里面的table清除

string userName = dtUsers.Rows[k]["name"].ToString();

string uid = dtUsers.Rows[k]["uid"].ToString();//比如admin

int id = int.Parse(dtUsers.Rows[k]["id"].ToString());//比如6

dvToDos = this.GetToDoList(id);//获取待办任务

dvEletter = this.GetEletterList(id);//电子函件

dvPublicFile = this.GetPublicFile(id);//公文传阅

dvTotal = this.UnionDV(dvToDos, dvEletter, dvPublicFile);//合并数据

if (dvTotal.Count > 0)

{

int m = dvTotal.Count;

System.Text.StringBuilder messages = new StringBuilder(String.Empty);

messages.Append(userName + ",您好,您有如下待办理任务:");

for (int n = 0; n < m; n++)

{

messages.Append(Convert.ToString(n + 1) + "、【" + dvTotal[n]["name"] + "】有" + dvTotal[n]["TaskNum"].ToString() + "个待办理任务 ");

}

ocs.AddMessage(uid, messages.ToString());//调用webservice将每个人的代办任务消息发送给相关用户

}

//释放资源

for (int p = 0; p < dvEletter.Count; p++)

{

dvEletter.Delete(p);

}

for (int s = 0; s < dvToDos.Count; s++)

{

dvToDos.Delete(s);

}

for (int o = 0; o < dvPublicFile.Count; o++)

{

dvPublicFile.Delete(o);

}

for (int q = 0; q < dvTotal.Count; q++)

{

dvTotal.Delete(q);

}

}

}

}

catch (Exception ex)

{

throw new Exception(ex.Message);

}

}

 

你可能感兴趣的:(window,职场,服务,休闲)