我正在开发一项服务,该服务将全天候运行,并将通过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部分服务处理的所有请求来处理它。
答案 0 :(得分:0)
我找到了这种情况的解决方案。这不是我最初想到的,但结果正是我所寻找的......
在ParserService中,我添加了以下属性:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class ParserService : IParserService
现在任何来到ParserService的请求都由该类的单个原始实例处理..
如果有人知道在没有这种属性的情况下实现相同结果的另一种方式,欢迎您分享。