在Windows Service中订阅和发布



你好,我正在尝试实现一个订阅和发布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中以某种方式停止线程,使服务死亡。

确保该线程不是后台线程。如果是的话,它将无法让应用存活下去。

我不确定你说你的服务将发布可观察对象是什么意思。谁会订阅这些可观测的数据?

相关内容

  • 没有找到相关文章

最新更新