2016-08-14 88 views
0

我想一個控制檯應用程序項目轉換爲Windows服務。事件處理程序應放在Windows服務中的位置?

我的虛擬控制檯應用程序項目,聽取來自第三方API(NET2 sdk)訪問事件,並打印他們的信息,以安慰。我想將它轉換爲Windows服務在後臺運行。

但是我在困難時期保持事件處理程序「活着」,所以它使服務運行時捕捉訪問事件。

目前我已經把它的調用onStart()函數中是這樣的:在從未觸發Net2AccessEvent方法

Net2 net2; 

public Net2MonitoringService() 
{ 
    InitializeComponent(); 
    eventLog1 = new System.Diagnostics.EventLog(); 
    if (!System.Diagnostics.EventLog.SourceExists("Net2 Monitoring Service")) 
    { 
     System.Diagnostics.EventLog.CreateEventSource(
      "Net2 Monitoring Service", "Net2 Monitoring Log"); 
    } 
    eventLog1.Source = "Net2 Monitoring Service"; 
    eventLog1.Log = "Net2 Monitoring Log"; 
} 

    protected override void OnStart(string[] args) 
    { 
     eventLog1.WriteEntry("Net2 Monitoring Service has started."); 
     net2 = new Net2(); 
     net2.Login(); 

     //Monitor main door events 
     net2.client.MonitorAcu(1172079); 
     eventLog1.WriteEntry("Monitoring door #1172079. Listening for events...", EventLogEntryType.Information); 

     //Create an event handler to handle the access event 
     net2.client.Net2AccessEvent += new OemClient.Net2AcuEventHandler(Net2AccessEvent); 
    } 

    protected override void OnStop() 
    { 
     net2.Logout(); 
     eventLog1.WriteEntry("Net2 Monitoring Service has stopped."); 
    } 

    private void Net2AccessEvent(object sender, IEventView e) 
    { 
     //Print access event details to log 
     string message = "Access event triggered:\n" + 
      "UserId: " + e.UserId.ToString() + "\n" + 
      "EventId: " + e.UserId.ToString() + "\n" + 
      "Address: " + e.UserId.ToString() + "\n" + 
      "SubAddress: " + e.UserId.ToString() + "\n" + 
      "EventDateTime: " + e.UserId.ToString() + "\n"; 
     eventLog1.WriteEntry(message, EventLogEntryType.SuccessAudit); 
    } 

上面的代碼的結果,即使存在要被捕獲的事件。


PS:而從Visual Studio調試器,保持主線程活着時觸發控制檯應用程序的Main()方法中執行相同的代碼工作正常。

+0

Windows服務的應用程序運行在會話0,並從用戶會話被完全隔離。因此,不是每個圖書館都可以在這種情況下工作,您需要諮詢圖書館供應商。 –

+0

@LexLi所以上面的代碼結構看起來不錯? Net2 SDK提供來自遠程訪問服務器的事件,所以我不確定其服務的運行時環境是否會導致此問題。 – LePhleg

+0

我也可以確認SKD支持在Windows服務中運行(http://www.paxton .co.uk /論壇/職位/ t794-NET2-SDK-使用功能於Windows的服務)。 – LePhleg

回答

0

爲了在幾天後回答我自己的問題,在使用單例避免丟失監視範圍並在OnStart()方法上運行它之後,問題似乎得到解決。

相關問題