2014-02-25 65 views
0

我正在嘗試使用C#和.NET框架編寫我的第一個Windows服務,並且在服務中的同一解決方案中引用項目時遇到問題。從Windows服務引用項目

  1. 1個MVC項目(網絡應用項目)
  2. 1附加加工項目(控制器內用於擴展處理)
  3. 1服務項目
  4. 1安裝屏蔽文件項目:VS2012內我的MVC溶液結構(成功安裝了服務項目)

在我的服務(我想每隔x分鐘就開始一次)中,我引用了intellisense能夠擴展的處理項目中的方法檢測我在服務項目中編寫代碼的時間(我有一個使用extendedProcessingProject;使用webAppProject;以及項目對extendedProcessingProject和Web應用程序項目的引用)。

該服務安裝到我的本地電腦沒有錯誤。當我啓動服務我正在記錄一個錯誤,我似乎無法弄清楚:

Exception body: ReminderEmailService Object reference not set to an instance of an  object. System.Collections.ListDictionaryInternal 
System.NullReferenceException: Object reference not set to an instance of an object. 
    at ReminderEmailService.ReminderEmailService.ReminderEmails(Object source, ElapsedEventArgs e) 

    at ReminderEmailService.ReminderEmailService.SendReminderEmails(Object source, ElapsedEventArgs e) 

虛空SendReminderEmails(System.Object的,System.Timers.ElapsedEventArgs)

我知道可以看到,雖然使用System.Diagnostics.Debugger.Launch();

List<SessionReminder> sessions = Queries.GetSessionsToRemind();      
//sessions does not have a value, method returns a list of 1 
//I suspect this is a project reference issue 
debugString += "sessions: \n" + sessions.ToString(); 
//exception thrown on this line--I suspect because sessions is null 

我使用我的解決方案中的所有項目的.NET4.0(不是客戶端配置文件)。任何有關如何啓用我的Windows服務來正確訪問這些程序集(webappproject.dll和extendedProcessing.dll)的深入瞭解,因爲這些DLL正在安裝盾安裝。

回答

1

它可能不是實際的裝配參考問題。您看到的錯誤是運行時正在抱怨訪問空對象的方法/字段/屬性。這表明您的代碼正在訪問未初始化的對象。

1

您顯示的異常看起來不像引用程序集的問題。它看起來像代碼中普通的普通錯誤,而不是缺少的程序集。

我總是爲Windows服務創建一個測試工具,使我能夠將該服務作爲一個簡單的Windows窗體應用程序來運行,以便於調試。

將您的服務實現與具有實際Windows服務的程序集分離爲一個單獨的程序集。用一個簡單的開始/停止按鈕創建另一個項目WPF/Winforms。從Windows服務和winforms應用程序引用包含在您的服務中運行的功能的程序集。

+0

我已經將服務在獨立程序集中執行的方法;但是,我收到了同樣的結果。同樣,智能感知可以訪問我創建的獨立程序集中的服務中所需的所有方法。然而; 'Queries.GetSessionsToRemind();'沒有在服務中返回一個結果(我已經在我的web應用程序項目中的一個控制器中單獨測試了這個方法,它應該等同於你建議的單獨的WPF/Winform項目,預期)。再次感謝您在這個問題上的幫助。 – miniscem

+0

那麼你不能在你的Windows服務中複製Web應用程序中的問題? – Mick

+0

我建議關於應用程序的配置或其中的上下文運行有不同的東西。我建議你使用Windows應用程序而不是Web應用程序來測試代碼,因爲Web應用程序和服務的上下文之間的差異將遠遠大於Windows服務和Windows窗體應用程序之間的差異。例如應用程序有HttpContext。您可能還想考慮安全上下文。 – Mick