当我使用 C# 连接 WebSphere MQ 而不安装 MQ 服务器和客户端时,我得到了异常The type initializer for 'IBM.WMQ.MQQueueManager' threw an exception
。我从 MQ 服务器添加了两个 MQ dll 的引用amqmdnet.dll
,amqmdxcs.dll
但它不起作用。如何在不安装 MQ 服务器或客户端的情况下连接到 MQ?谢谢!
3 回答
我不建议在不安装 MQ 客户端库的情况下使用它们。安装确保所有必需的二进制文件都已安装并在 GAC 中注册。不需要添加对 amqmdxcs 的引用。只需参考 amqmdnet 就足够了。
因此最好安装 MQ 客户端并运行您的应用程序。
是的,您可以,您将需要以下 2 个 DLL:“amqmdnet.dll”和“amqmdxcs.dll”
然后,您可以:
- 在全局程序集缓存 (GAC) 中注册这 2 个 DLL
- 您可以将它们添加为对您的项目的引用
但是请注意:对于选项 2,您需要确保注册表路径“HKEY_LOCAL_MACHINE\SOFTWARE\IBM\WebSphere MQ\Installation”存在。
如果它不存在并且 DLL 不在 GAC 中,您将收到以下异常:
System.TypeInitializationException:“IBM.WMQ.MQQueueManager”的类型初始化程序引发了异常。--> System.TypeInitializationException:“IBM.WMQ.CommonServices”的类型初始化程序引发了异常。--> System.NullReferenceException:对象引用未设置为对象的实例。
这是因为,当不在 GAC 中时,包含“IBM.WMQ.CommonServices”的“amqmdxcs.dll”会尝试从注册表路径中读取子键以填充一些变量,但由于它不存在,它会失败。
对我来说,这种方法不需要“安装”键中的任何值即可工作。
另请参阅: .net 使用 IBM MQ 没有完整的 MQ 客户端安装
基本上从 WMQ bin 文件夹中获取 2 个 dll:amqmdnet.dll & amqmdxcs.dll
我发现对于 WMQ 7.5,您需要在 GAC 中注册 2 个 dll 才能正常工作。您需要管理员权限才能注册它们。
引用项目中的库以使用本机 WMQ 对象