C# Can';无法从Windows服务连接到外部服务

C# Can';无法从Windows服务连接到外部服务,c#,windows,visual-studio,service,C#,Windows,Visual Studio,Service,我有一个程序集DLL,可以连接到ActiveMQ代理。从NUnit使用DLL很好,从控制台应用程序使用DLL也很好。问题是从Windows服务使用它。到代理的连接总是失败,就好像服务没有可用的外部连接一样。即使绕过SCM并在Visual Studio中运行代码也会失败。Windows服务项目需要做什么特殊的事情才能获得外部连接 DLL中的失败代码如下所示: ConnectionFactory connectionFactory = new ConnectionFactory(connectURI

我有一个程序集DLL,可以连接到ActiveMQ代理。从NUnit使用DLL很好,从控制台应用程序使用DLL也很好。问题是从Windows服务使用它。到代理的连接总是失败,就好像服务没有可用的外部连接一样。即使绕过SCM并在Visual Studio中运行代码也会失败。Windows服务项目需要做什么特殊的事情才能获得外部连接

DLL中的失败代码如下所示:

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

connectURI在控制台应用程序和测试中正常工作。

主要区别在于控制台应用程序和NUnit以登录用户身份运行。windows服务以您配置为运行的方式运行

尝试将该服务配置为以您的帐户运行,然后查看它是否正常工作。确保它没有作为网络服务或本地服务运行

它运行的帐户可能需要用户配置文件(以前登录过),特别是在使用代理服务器时

尝试运行或查看尝试的连接中发生了什么。另外,尝试在连接尝试周围添加一些日志记录和跟踪-异常堆栈应该有更多详细信息

从注释编辑:还可以尝试添加.net web客户端连接代码,这将更好地了解存在的任何连接问题。显然,NMS正在掩盖和吞咽根本问题


编辑:对于其他正在寻找解决方案的用户(没有阅读所有注释),添加.web客户端代码会暴露根问题,这是一个配置文件问题。

我尝试了所有提供的用户、LocalSystem、LocalService、NetworkService,甚至管理员,但都没有成功。而且它甚至在VisualStudio中调试都不起作用。连接未进行身份验证。我使用log4net捕获异常,但它只是说:Apache.NMS.NMSConnectionException被捕获并且“应用程序出错”。我假定在Visual Studio中进行调试也会导致它以登录用户的身份运行,但这也不起作用。在Visual Studio中进行调试不会使它以登录用户的身份运行-它将以配置为在SCM中运行的方式运行-调试器以您的身份运行并附加到该进程。请尝试配置为以您的帐户身份运行,LS或管理员)。确保您选择的帐户是您刚才在console应用程序中以交互方式运行的帐户。这将排除用户的问题。您还可以使用straight.net web客户端类添加一些代码,以查看是否可以发出成功的请求。或者,获取NMS的代码并在其中进行调试。我在Visual Studio中绕过SCM(已将连接代码移动到temp方法,但未运行服务启动),直接在调试器中运行连接代码,而不是连接到正在运行的服务。仍然无法连接。将代码复制/粘贴到控制台应用程序中是可行的。