2012-07-04 99 views
0

我有一個程序集DLL,可以連接到ActiveMQ代理。使用NUnit中的DLL可以正常工作,並且可以從控制檯應用程序使用它。問題是從Windows服務中使用它。與代理的連接總是失敗,就好像服務沒有可用的外部連接一樣。即使繞過SCM並在Visual Studio中運行代碼也會失敗。有什麼特別的Windows服務項目需要做外部連接嗎?無法連接到Windows服務的外部服務

DLL中的失敗代碼是這樣的:

ConnectionFactory connectionFactory = new ConnectionFactory(connectURI); 
connection = connectionFactory.CreateConnection(); // fails here 

的connectURI是好的,因爲它工作在控制檯應用程序和測試。

回答

1

主要區別在於控制檯應用程序,NUnit以登錄用戶身份運行。一個Windows服務作爲你配置它運行的任何東西運行。

嘗試配置服務以運行您的帳戶並查看它是否有效。確保它不作爲網絡服務或本地服務運行。

它正在運行的帳戶可能需要用戶配置文件(之前已登錄),尤其是在使用代理服務器時。

嘗試運行fiddlernetmon以查看嘗試連接中發生了什麼。另外,嘗試添加一些日誌和跟蹤連接嘗試 - 異常堆棧應該有更多的細節。

編輯點評:還可以嘗試添加.net Web客戶端連接代碼,這將提供更好的洞察任何連接問題。顯然NMS掩蓋和吞噬根本問題。

編輯:爲其他人尋找解決方案(沒有閱讀所有評論),添加.web客戶端代碼暴露了根本問題,這是一個配置文件問題。

+0

我試過每一個提供的用戶,本地系統,本地服務,網絡服務,甚至管理員,他們都沒有工作。此外,它甚至不能在Visual Studio中進行調試。連接不認證。我使用log4net來捕獲異常,但它只是說:Apache.NMS.NMSConnectionException被捕獲並且「應用程序出錯」。我認爲在Visual Studio中調試也會導致它作爲登錄用戶運行,但這也不起作用。 – codebrane

+0

在Visual Studio中進行調試不會使其以登錄用戶身份運行 - 它將按照配置爲在SCM中運行的那樣運行 - 調試程序會像您一樣運行並附加到該進程。 – bryanmac

+0

嘗試配置爲以您的帳戶Inot NS,LS或管理員身份運行)。確保您選擇的帳戶是您在控制檯應用程序中以交互方式運行的帳戶。這將排除用戶成爲問題。 – bryanmac

相關問題