为什么要在BackgroundWorker中为Windows服务中的WCF服务实例化ServiceHost ?



我创建了一个Windows服务来托管WCF服务。它工作没有问题,但我在网上注意到,很多人构建他们的服务,这样servicehost对象是在BackgrounWorker中实例化的。我只是想知道使用这种模式的理由/优势是什么?

这里有一个例子来说明我的意思。

{
     internal static ServiceHost myHost = null;
     BackgroundWorker worker;
     public Service1()
     {
        InitializeComponent();
     }
     protected override void OnStart(string[] args)
     {
        worker = new BackgroundWorker();
        worker.DoWork += new DoWorkEventHandler(worker_DoWork);
     }
     void worker_DoWork(object sender, DoWorkEventArgs e)
     {
        //throw new NotImplementedException();
        if (myHost != null)
        {
           myHost.Close();
        }
        myHost = new ServiceHost(typeof(ServicetohostinWindow.Service1));
        myHost.Open();
     }
}

这可能是为了解除OnStart方法的阻塞,该方法通常在服务启动时调用。构建和打开新的服务主机可能是一个很长的操作,并且直到OnStart完成后服务才会报告自己已启动。服务处于"启动"状态的时间是有超时的,所以OnStart必须尽可能快。

最新更新