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()方法中執行相同的代碼工作正常。
Windows服務的應用程序運行在會話0,並從用戶會話被完全隔離。因此,不是每個圖書館都可以在這種情況下工作,您需要諮詢圖書館供應商。 –
@LexLi所以上面的代碼結構看起來不錯? Net2 SDK提供來自遠程訪問服務器的事件,所以我不確定其服務的運行時環境是否會導致此問題。 – LePhleg
我也可以確認SKD支持在Windows服務中運行(http://www.paxton .co.uk /論壇/職位/ t794-NET2-SDK-使用功能於Windows的服務)。 – LePhleg