2014-01-16 172 views
0

我有一個使用分層體系結構(演示,業務和數據訪問層)創建的asp.net項目。現在我需要將Windows服務添加到將執行後臺進程的項目中。用戶可以從該站點註銷,但服務將在後臺運行。完成任務可能需要幾個小時。我有以下問題。Windows服務作爲分層體系結構中的服務層

  1. 我能有這個窗口服務作爲我的asp.net web應用程序單獨的項目?如果是的話,它應該被添加?此Windows服務可能會從業務層調用。該服務將與數據庫交互。那麼我可以將它作爲單獨的服務層來添加嗎?

  2. 正如我所說的Windows服務會在後臺運行,因此我可以創建線程內窗口服務「的OnStart」事件做了手術。我對麼?我知道在'OnStart'事件中編寫長時間運行的流程並不是一個好習慣。這就是我使用線程的原因。但是,如果另一個用戶登錄到該網站,該服務將再次調用,並且它將創建新的工作線程。這種方法是否有任何性能問題?

謝謝。

回答

1

個人而言,我會把該服務在它自己的解決方案。我會把客戶端放在網絡解決方案中。主要是因爲部署將會完全不同,並且幫助保持服務API不被破壞。

你還沒有說夠什麼服務是要幹什麼,但是我希望。

當用戶登錄時,一個通知被髮送到該服務。登錄(USER_ID)

的OnStart的服務應該揭開序幕偵聽器線程

然後,當服務「聽到」登錄(USER_ID)通知它確實像

if (LogInTaskThread == null) 
{ 
    LoginTaskThread = new Task("loginTask"); 
} 

那種事反正...

0

如果Windows服務在後臺運行,並不會提供從外部呼叫者的任何要求,那麼你可以把你的Windows服務應用程序的UI少表示層的一種形式。它應該放置在一個單獨的項目中,並像任何應用程序一樣與業務和數據層進行通信。

但是,如果你的Windows服務是服務從外部程序調用,那麼你可能需要把你的Windows服務作爲一個服務層。

你可能想從這裏得到一個更清晰的圖層的圖片 http://serena-yeoh.blogspot.com/2013/06/layered-architecture-for-net.html