【问题标题】:Why instantiate a ServiceHost within BackgroundWorker for a WCF service hosted within a Windows Service?为什么要在 BackgroundWorker 中为托管在 Windows 服务中的 WCF 服务实例化 ServiceHost?
【发布时间】:2013-05-17 04:53:32
【问题描述】:

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

这是我的意思的一个例子。

{
     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();
     }
}

【问题讨论】:

  • 阅读并告诉我 :) 如果您可以将 ServiceBehavior 设置为在每次调用时打开新线程,为什么要这样做?也许是因为异步原因?

标签: c# wcf windows-services backgroundworker


【解决方案1】:

可能这样做是为了解除对 OnStart 方法的阻塞,该方法通常在服务启动时调用。构建和打开新的服务主机可能是一个漫长的操作,直到 OnStart 完成后服务才会报告自己已启动。服务处于“启动”状态的时间存在超时,因此 OnStart 必须尽可能快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    相关资源
    最近更新 更多