Windows服务交互,该如何处理


Windows服务交互
现有一项目,服务端宿主采用Windows服务处理客户端提交的数据,客户端的请求出现异常的,会把该异常请求追加到一个全局队列.出于人工管理的需要,假若某时刻管理员A启动一个WinForm程序,要求该WinForm程序能读取Windows服务中的异常队列中的请求,并能将请求的异常部份进行修改再提交回Windows服务再次处理.
先说我的思路.

A.不使用全局队列,使用数据库存贮异常请求.启动WinForm时从数据库读取.
  预计问题:没有真正的交互,修改后再次处理请求时WinForm将会模拟成客户端,也就是说该管理程序将包含所有客户端功能,以后升级客户端时,必需将该WinForm同步.

B.使用MSMQ存贮异常请求信息.
  预计问题:同上. 除此之外,由于消息队列的特性,读取之后MSMQ消息将不存在,很容易丢失异常信息.

C.服务端开启两个监听线程,一个用于监听客户端请求,另一个用于监听管理程序.
  预计问题:性能损失;其他未知.

D.直接由服务产生一个GUI管理程序,启动时隐藏.
  预计问题:不太可取,GUI程序是否会在Windows未登录而服务已经启动时引发问题

总结:
问题A:异常请求的存贮方案.
 PS:好像WebService程序会为每个请求单独创建一个服务对象,以达到负载均衡,Windows服务能否考虑Windows服务多线程处理方式 采用全局队列存贮是否会有影响

问题B:交互或者再次处理异常的解决方案.

End:希望大家指教,如果有好的解决方案的,请不吝赐教.

C#语言 .net 程序开发

人外姬阿洛 13 years, 7 months ago


我的思路和A差不多
windows服务里收到客户端消息后立即存入数据库或者存入hash中再二进制序列化到文件里,然后判断该消息是否为异常消息,将判断结果反馈客户端,并更新数据库或文件
服务端的管理winform依赖数据库或文件

城管管理者队长 answered 13 years, 7 months ago


我之前做的似乎是你所说的A,B的合体:启动时从DB读取(同时读取MQ的线程也启动),MQ的线程启动后会去读取相关信息,再处理。另外,为了确保没有装MQ服务的机器也能正确处理相关数据,后来又增加了个FTP服务读写数据的线程。

Oichi answered 13 years, 7 months ago


进来学习的,竟然90%是垃圾回复~~~希赛变化真大

雅音宫羽 answered 13 years, 7 months ago


用.net remoting将windows服务提供给客户端调用即可实现客户端与windows服务的实时交互

Signas answered 13 years, 7 months ago


感觉A好些.....

NINI酱 answered 13 years, 7 months ago


顶,学习,关注!!!!!!!!!!!!

6699zjh answered 13 years, 7 months ago



规则劳动者大厦 answered 13 years, 7 months ago


对于异常,除了存根,当然就是处理.

存根,处理 有N个方法,其中有X个方法被大家公认为比较靠谱,比较in,比较流行,比较通俗...就不例举了.

胖子ymd answered 13 years, 7 months ago


文本日志保存 程序的运行日志一直是软件的常态.

wycsos answered 13 years, 7 months ago


up

某科学的空间使 answered 13 years, 7 months ago


up

同德第六虎Y震 answered 13 years, 7 months ago


up!! 学习!!!!

反魂蝶8分咲 answered 13 years, 7 months ago


推荐用A,+web

Mlong answered 13 years, 7 months ago

Your Answer