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

时间:2016-01-08 09:49:53

标签: c# windows wcf service long-running-processes

我正在开发一项服务,该服务将全天候运行,并将通过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部分服务处理的所有请求来处理它。

1 个答案:

答案 0 :(得分:0)

我找到了这种情况的解决方案。这不是我最初想到的,但结果正是我所寻找的......

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

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

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

如果有人知道在没有这种属性的情况下实现相同结果的另一种方式,欢迎您分享。