IObservable在Windows服务中订阅和发布

时间:2011-04-07 06:04:31

标签: f# windows-services system.reactive

您好我正在尝试实现订阅并发布到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窗体上工作,但到目前为止,转向服务迄今尚未成功。)

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

如果您在Windows服务中没有执行任何操作,它将在OnStart之后直接退出。你需要让你的应用程序保持活力。一种常见的方法是生成一个单独的线程,它将无限期地进行处理。然后,在OnStop中以某种方式停止线程以使服务死亡。

确保该线程不是后台线程。如果是,它将不会保持应用程序活着。

当您说您的服务将发布可观察信息时,我不确定您的意思。谁会订阅那些可观察者?