我有一个管理良好的Windows服务。每隔n(> 5)秒检查一些进程和其他Windows服务的状态(例如内存消耗),并进行一些数据库记录并在必要时引发事件。
我打算创建一个ASP.NET网站,允许用户查询Windows服务正在监视的进程的状态。研究过这些选项之后,最新的方法就是使用Windows服务中托管的WCF服务充当ASP.NET网站和Windows服务之间的中介。这样,用户可以通过浏览器请求Windows服务正在监视的任何进程集的当前状态的快照,并通过WCF服务中继该请求和后续响应(我认为使用命名管道)。
所以,我的困难在于Windows服务中存在一组方法和事件,其中存在单个根对象(比如说MonitorObject)。我没有看到如何使用对MonitorObject的引用来实例化ServiceHost,以便WCF服务可以调用Windows服务中的方法。我想也许我需要让Monitor对象成为Windows Service类(包含OnStart和OnStop)的共享(我是VB'ing)成员并使所有事件共享,以便WCF服务可以只访问WindowsService .SharedMonitorObject无需传递对象....
然而,我迷失在这个主题中,我正在寻求有关如何最好地进行的任何建议。
提前致谢。
答案 0 :(得分:1)
我认为你走的是正确的轨道。我不一定会让整个MonitorObject
共享,但您可以在该对象中放置一个共享方法,将单个根对象返回给调用者。
有一种名为Singleton Pattern的设计模式可以帮助您解决这个问题。 Jon Skeet在.NET中使用这种模式时需要注意的一些事情上写了excellent article。他的文章使用C#作为示例,但here's使用VB引用此模式的问题。
虽然从您的描述中不清楚,但我的猜测是您的Windows服务现在基本上是单线程的。请记住,一旦添加WCF服务,您将需要使其引用的方法是线程安全的。