最近做的一個項目,牽涉到windows service和webservice,我想把做這個項目的一點小小的經驗記下來,對遇到同樣問題的朋友或許會起到一點小小的協助,呵呵。
項目剛開始的時候我並沒有打算採用以前經常使用的那種三層結構的模式,因為這個項目實在是太小了,一個解決方案裡面只包含了一個web site和一個windows service。web site裡包含裡簡單的webservice和幾個page,唯一比較特殊的一點就是webservice是用vb編寫的,而其餘的page使用c#。為了編寫方便,我把以前經常用到的sqlhelper類也拷貝到了web site下的App_Code檔案夾裡,由於webservice(類的名字叫IBMLoad.cs)使用VB語言,所以在編譯的時候就報錯,說IBMLoad.cs和sqlhelper.cs不能同時放在App_Code檔案夾中,因為他們一個是使用VB一個是使用C#。基於這個原因,我又添加了一個類庫項目,將sqlhelper.cs放在了這個類庫項目中。後來想了想,還不如採用以前的模式,把各層之間分開。可是這樣做,我就要在windows service項目中引用其它的一些項目,比如IDAL,SQLServerDAL,Entity等,這與我以前做windows service時不太一樣,我以前寫的幾個項目所有代碼都放在一起,亂是亂了些,但是自己看習慣了,也沒覺得什麼不好。這次這樣一搞,代碼都寫在了其它地方,windows service中沒有幾行代碼,反倒是不習慣了。
可是我安裝之後啟動服務的時候卻出錯了,如:
後來才發現,就是因為windows service引用了其它的幾個項目,產生之後產生了一堆的DLL檔案,而我在安裝的時候還是採用以前的那種方法,只拷貝了一個exe檔案到目標伺服器進行安裝,其實這個服務真正的商務邏輯是在那一堆DLL檔案裡面,在缺少DLL檔案的情況下進行安裝,這時候的windows service就像一張白紙,什麼都沒有,所以它們就沒有什麼可做的。
所以我把安裝好的服務卸載掉,然後將exe和DLL檔案同時拷貝到目標伺服器,然後運行安裝。安裝完畢後啟動服務,就能夠正常運行了。不過現在我有個疑問,如果只是一個單獨的windows service項目,有必要採用分層的方式實現嗎?希望高手看到能夠指點一下。