我创建了一个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();
}
}
答案 0 :(得分:1)
这可能是为了取消阻止OnStart方法,通常在服务启动时调用。构建和打开新服务主机可能是一个很长的操作,并且在OnStart完成之前,服务不会将其自身报告为已启动。服务处于“启动”状态的时间超时,因此OnStart必须尽可能快。