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:希望大家指教,如果有好的解决方案的,请不吝赐教.
[解决办法]
关注...
[解决办法]
为什么客户端不保存自己的异常信息,当下次启动的时候读取异常信息,然后重新发送上次出错的信息
[解决办法]
做过类似的,与LZ一样也没有好的解决方案,等待好的解决方案的出现~
[解决办法]
我是来打酱油接分的
[解决办法]
学习
[解决办法]
gz
[解决办法]
mq用来存储消息是不合适的
最好还是用其他方式存储异常消息
[解决办法]
GZ
[解决办法]
用方法A,客户端做成b/s,管理程序和客户端一体,只是登录权限不同
[解决办法]
UP
[解决办法]
up!! 学习!!!!
[解决办法]
推荐用A,+web
[解决办法]
up!! 学习!!!!
[解决办法]
up
[解决办法]
up
[解决办法]
文本日志保存 程序的运行日志一直是软件的常态.
[解决办法]
对于异常,除了存根,当然就是处理.
存根,处理 有N个方法,其中有X个方法被大家公认为比较靠谱,比较in,比较流行,比较通俗...就不例举了.
[解决办法]
顶
[解决办法]
顶,学习,关注!!!!!!!!!!!!
[解决办法]
感觉A好些.....
[解决办法]
用.net remoting将windows服务提供给客户端调用即可实现客户端与windows服务的实时交互
[解决办法]
进来学习的,竟然90%是垃圾回复~~~csdn变化真大
[解决办法]
我之前做的似乎是你所说的A,B的合体:启动时从DB读取(同时读取MQ的线程也启动),MQ的线程启动后会去读取相关信息,再处理。另外,为了确保没有装MQ服务的机器也能正确处理相关数据,后来又增加了个FTP服务读写数据的线程。
[解决办法]
我的思路和A差不多
windows服务里收到客户端消息后立即存入数据库或者存入hash中再二进制序列化到文件里,然后判断该消息是否为异常消息,将判断结果反馈客户端,并更新数据库或文件
服务端的管理winform依赖数据库或文件
[解决办法]
做过类似的,与LZ一样也没有好的解决方案,等待好的解决方案的出现~
[解决办法]
个人觉得A好。首先从逻辑上看更清楚些,设计结构更合理。既然是业务异常而不是程序异常,那更应该专门保存。然后,LZ帖子里提到的关于A方案的预计问题完全可以通过设计来避免,比如固定下客户端和服务端之间传递数据的格式,为功能扩展增加保留位等等。而其他方案的预计问题则是没有办法解决的。
[解决办法]
"B.使用MSMQ存贮异常请求信息.
预计问题:同上. 除此之外,由于消息队列的特性,读取之后MSMQ消息将不存在,很容易丢失异常信息."
MSMQ中所谓读取,有两种方式:Peek和Receive.
Receive就是把message拿出来,原队列中当然message不复存在;Peek呢?就是查看一下message,但是并不在原队列中清除。
[解决办法]
这种问题,不应该主要是技术层面要解决的问题,而是流程设计者要考虑的
所谓的异常是业务流程中的异常罢了,那么你的流程当然要考虑出现异常的处理流程,
所有的数据都可以通过数据库等方法保存下来,关键是你要制定如何去处理这个数据(状态标记)
仅此而已
所谓在服务器端登录用winform程序还是管理员用个web来处理,都只是具体的技术实现手段罢了
[解决办法]
这个问题的难点在于异常以后还要重新提交, 那就得保留异常发生时的全部场景,
那就不是简单的日志能解决的问题了. 除了用数据库别无他法.