C#->;Windows服务->;WCF ServiceHost->?如何实现长运行过程

本文关键字:gt 实现 运行 过程 何实现 服务 Windows WCF C#- ServiceHost- | 更新日期: 2023-09-27 18:29:32

我正在开发一项服务,该服务将全天候运行,并通过MVC网站进行控制,但这并不重要。不过,重要的是,我现在拥有的是(针对windows服务):

    protected override void OnStart(string[] args)
    {
        if (this.ServiceHost != null)
            this.ServiceHost.Close();
        this.ServiceHost = new ServiceHost(typeof(ParserService));
        this.ServiceHost.Open();
    }

ParserService目前如下所示:

public class ParserService : IParserService
{
    private ParserFacade FacadeForParser;
    public void Start()
    {
        if(FacadeForParser == null)
            this.FacadeForParser = new ParserFacade();
        this.FacadeForParser.Start();
    }
    public bool IsRunning()
    {
        return true;
    }
    public void Stop()
    {
        this.FacadeForParser.Stop();
    }
    public List<string> GetAllTitles()
    {
        return this.FacadeForParser.GetAllTitles();
    }
}

问题是:在Parser服务中,FacadeForParser永远不会为下一个调用进行搜索。似乎我误解了WCF类的生命周期。。。有人能告诉我实现这一部分的正确方法吗?

我确实需要:1个ParserFacade实例来处理WCF服务部分处理的所有请求。

C#->;Windows服务->;WCF ServiceHost->?如何实现长运行过程

我已经找到了这个案例的解决方案。这并不是我最初想的,但结果正是我想要的。。

在ParserService中,我添加了以下属性:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class ParserService : IParserService

现在,任何到达ParserService的请求都由该类的单个原始实例处理。。

如果有人知道另一种方法可以在没有这种属性的情况下达到同样的效果,欢迎分享。