你好,我正在尝试实现一个订阅和发布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窗体上运行,但到目前为止还没有成功移动到一个服务)
谢谢你的帮助!
如果你在Windows服务中不做任何事情,它将在OnStart后直接退出。您需要保持应用程序的活力。一种常见的方法是生成一个单独的线程,它将无限期地执行您的处理。然后,在OnStop中以某种方式停止线程,使服务死亡。
确保该线程不是后台线程。如果是的话,它将无法让应用存活下去。
我不确定你说你的服务将发布可观察对象是什么意思。谁会订阅这些可观测的数据?