创建Windows服务

注册.net VS开发的windows服务程序有两种方式:

1)  利用windows自带的服务管理程序(sc.exe)

创建:sc create eOperationService binpath= "C:/eOperationServer/eOperationServer.exe --service" displayname= "eOperationService" start= auto

配置: sc config eOperationService binpath= "C:/eOperationServer/eOperationWindowsService.exe"

2)  利用安装程序工具(Installutil.exe)

cd C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727

注册服务: InstallUtil C:/eOperationServer/eOperationServer.exe

删除服务: installutil  /u C:/eOperationServer/eOperationWindowsService.exe

eOperationWindowsServicevs开发的windows 服务程序,是在服务控制管理器(SCM) 中注册多项服务的可执行文件。

 

喜欢第一种方式,因为Installutil.exe需要安装.net Framework

eOperationServer作为其中的service1,接收客户端消息并为客户提供非实时服务,消息是以socket方式传递。

/********socket传送信息的解析步骤***************/

1)客户端向service1传递指定长度的报文,内容为后续数据报文的长度,通常为5位字节长。

2)服务端接收到表示长度的报文后,会给客户端一个应答报文(OK/ERROR

3)如应答报文为OK,客户端给服务端传送数据(报文长度为上面约定的大小)

4)客户端数据报文传送完后可立即关闭连接,异步处理其它的任务,服务端接收完数据会check数据大小

5)如应答报文为ERROR,客户端同步给用户显示错误信息,不再传送数据报文

定义这种传送数据的方式,可以防止socket报文丢失,从而保证请求数据的完整。客户端的数据IO是这样的:

1,    发送70000的二进制数据到server,等待server返回消息

2,    接收到消息OK,发送数据;消息不是OK,报错

客户端可以重复上面的两个步骤发送消息到service1,但可能出现第一个消息的2与第二个消息的1被封装在同一个二进制数据流中发送过去;为防止这种情况,可以在发送完2后,进程等待一段时间:Thread.Sleep(1000);

 

 

service1的定时器需要添加如下设置,表明它是一次性而非重复执行:

this.timer1.AutoReset = false;

 

service1ElapsedEventHandler 委托中包含socket的创建,侦听,响应。这部分代码如封闭成dll,通过函数调用,服务端的socket会创建不成功,后来尝试向dll传入ServerSocket,侦听阻塞。

个人认为是windows服务中,进程的资源分配不能在dll中进行,dll中的socket也不能接收外部进程的socket数据(但连接可以建立)。后台将socket的创建,侦听,响应部分直接写在eOperationServer中就OK

如果service1中有访问数据库,可以将服务的登陆改为本地系统账户.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值