2013-02-27 102 views
0

我遇到了Windows服务的问题 - 部署后service_Start尝试失败(超时)。第二次尝试主要成功。 我试着增加超时但它没有帮助。 该服务没有依赖关系。在部署后启动服务命令失败

这是一个c# + Topshelf (latest)应用程序,它使用Castle.Windsor (2.5.3)容器。 实施IMyService的主要类已注册到lifestyleType Singleton。 其他依赖项被注册为transient

该服务正在读取Rabbit总线上的消息并将其存储在Couchbase中。

配置代码如下所示:

HostFactory.Run(x =>         
      { 
       x.Service<IMyService>(s =>       
       { 
        s.ConstructUsing(name => WindsorContainerContext.Container.Resolve<IMyService>()); 
        s.WhenStarted(s => s.Start());    
        s.WhenStopped(s => 
            { 
             s.Stop(); 
             WindsorContainerContext.Container.Release(s); 
             WindsorContainerContext.Container.Dispose(); 
            }); 
       }); 
       x.RunAsLocalSystem();        

       x.SetDescription(serviceDescription); 
       x.SetDisplayName(serviceDescription);      
       x.SetServiceName(serviceName); 

      });  

我想,也许事情没有得到正确释放,并导致启动失败,但毕竟已经尝试了一些变化我真的没有想法什么别的尝试。

我知道这可能不足以解决问题 - 请告诉我哪些信息会有帮助。我真的很想知道这里发生了什么,所以我也很感激你能否指出我在调试这个方面的正确方向。

+0

您似乎没有权限方面的问题,因为服务在第二次尝试时按预期工作。我建议您调试服务的启动方法,因为通常超时是由此方法中的代码引起的。 – 2013-02-27 14:54:56

+0

@Kokulan - 我不太清楚在调试时如何使它失败,直到现在我无法在调试模式下发生任何故障。启动方法启动一个新任务,开始从总线上消费消息并将其保存到Couchbase。没有太多内容,所有内容都很好地包装在try/catch块中,所以无论发生什么异常,都应该处理它们。 – 2013-02-27 16:15:41

+0

您可以在start方法中将活动和时间记录到日志文件中。我通常在启动方法中写入主要活动以记录文件,并查看发生了什么,因为在调试过程中不容易捕获所有事件。你可以比较第一次和后来的开始日志。希望能帮助到你。 – 2013-02-27 16:24:49

回答

0

所以作为一个控制台应用程序,正常的调试,你通常不会超时。

所以你可以要求更多的时间,但我会开始请求像20-30秒。如果您问太多时间,服务经理会忽略您的请求,并且不会告诉您。