2013-02-27 104 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秒。如果您問太多時間,服務經理會忽略您的請求,並且不會告訴您。