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 ago


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

城管管理者队长 answered 13 years ago


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

Oichi answered 13 years ago


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

雅音宫羽 answered 13 years ago


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

Signas answered 13 years ago


感觉A好些.....

NINI酱 answered 13 years ago


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

6699zjh answered 13 years ago



规则劳动者大厦 answered 13 years ago


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

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

胖子ymd answered 13 years ago


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

wycsos answered 13 years ago


up

某科学的空间使 answered 13 years ago


up

同德第六虎Y震 answered 13 years ago


up!! 学习!!!!

反魂蝶8分咲 answered 13 years ago


推荐用A,+web

Mlong answered 13 years ago

Your Answer