C# ActiveMQ未找到用于连接的IConnectionFactory实现

C# ActiveMQ未找到用于连接的IConnectionFactory实现,c#,activemq,C#,Activemq,我已经在服务器上安装了ActiveMQ 5.13.0版本,并尝试使用C#client访问代理。我创建了一个控制台应用程序,并安装了Apache.NMS.ActiveMQ版本1.7.1 nuget包。当我尝试访问代理时: Line 1 Uri uri = new Uri("tcp://192.168.110.136:61616"); Line 2 NMSConnectionFactory NMSFactory = new NMSConnectionFactory(uri); 在第二行,它没有

我已经在服务器上安装了ActiveMQ 5.13.0版本,并尝试使用C#client访问代理。我创建了一个控制台应用程序,并安装了Apache.NMS.ActiveMQ版本1.7.1 nuget包。当我尝试访问代理时:

Line 1 Uri uri = new Uri("tcp://192.168.110.136:61616"); 
Line 2 NMSConnectionFactory NMSFactory = new NMSConnectionFactory(uri); 
在第二行,它没有为连接URI抛出IConnectionFactory实现:tcp://192.168.110.136:61616/ 例外

Project的.NETFramework版本是3.5,我也尝试过.NET4.0和4.5。但是结果是一样的,抛出同样的异常

ActiveMQ正在服务器上运行,我可以使用telnet和管理UI访问服务器的61616端口。我查看了其他类似的帖子,但没有帮助解决问题。欢迎任何帮助


谢谢。

首先,确保您的应用程序同时引用Apache.NMS.dll和Apache.NMS.ActiveMQ.dll程序集,以便访问所有实现位

然后尝试使用URI,该URI引用您正试图通过通用NMSConnectionFactory使用的提供程序实现:

Uri uri = new Uri("activemq:tcp://192.168.110.136:61616"); 
或者,您可以直接使用ActiveMQ IConnectionFactory实现:

IConnectionFactory factory = new Apache.NMS.ActiveMQ.ConnectionFactory(uri); 
如果有人知道两者之间的区别,请解释

在我的项目中,我使用了非常旧的Apache.NMS.ActiveMQ版本(1.1),它附带了一个名为nmsprovider-ActiveMQ.config的文件

当我升级时,我遇到了与你观察到的相同类型的问题

我发现NMSConnectionFactory与早期版本不同

  • 较新版本具有预先配置的工厂URL的查找列表(以定位正确的程序集和工厂实现)
  • 我提到的配置文件可以覆盖程序集的名称。但是,如果旧版本要求配置文件提供程序集的全名(包括.dll文件扩展名),则NMSConnectionFactory的新版本将调用assembly.Load(),在这种情况下,这将失败
  • 只需自己加载ActiveMQ程序集并实例化其工厂就不那么复杂了,但我想在各种工厂之间切换会变得更麻烦。然而,实际结果(如果您只关心一种类型的工厂)是相同的。NMSFactory的主要任务是定位所选提供者的工厂类

    升级此程序集时的最后一个陷阱是,现在需要对连接对象调用.Start()


    TL;DR:检查你是否有我提到的配置文件。编辑它(去掉.dll文件扩展名)或完全删除它(它可能不包含任何尚未硬编码到Apache.NMS程序集中的信息)

    使用ConnectionFactory NMSFactory=new ConnectionFactory(uri)时确定;它可以工作,而不是NMS连接工厂。如果有人知道两者之间的区别,请解释。谢谢。我的问题是没有引用Apache.NMS.ActiveMQ.dll。谢谢