您好我正在尝试实现订阅并发布到IObservables的Windows服务。
我使用了Ted Neward博客中的http://blogs.tedneward.com/2010/11/20/Windows+Service+In+F.aspx作为起点。
type WindowsService() as this
let createAndPublishObservables() =
let obs1 = createObservable1()
let obs2 = createObservable2()
let combObs = Observable.CombineLatest(obs1, obs2) |> map ( fun (firstObsValue, secObsValue) -> firstObsValue + secObsValue)
let obsUpdater = new ObsUpdater()
let updaterPublish = combObs.subscribe( fun x -> obsUpdater.publish(x), ignore, fun () -> ())
override this.OnStart(args:string[])
base.OnStart(args)
// and so on....
当我尝试调试此代码时,似乎服务完成执行并且订阅者和发布者超出范围(因此反应性消失)。
我是否需要添加其他内容,例如消息泵才能使其正常工作? (如果它在Windows窗体上工作,但到目前为止,转向服务迄今尚未成功。)
感谢您的帮助!
答案 0 :(得分:2)
如果您在Windows服务中没有执行任何操作,它将在OnStart之后直接退出。你需要让你的应用程序保持活力。一种常见的方法是生成一个单独的线程,它将无限期地进行处理。然后,在OnStop中以某种方式停止线程以使服务死亡。
确保该线程不是后台线程。如果是,它将不会保持应用程序活着。
当您说您的服务将发布可观察信息时,我不确定您的意思。谁会订阅那些可观察者?