IBM.WMQ.MQQueueManager的类型初始化程序抛出异常

时间:2012-04-18 06:17:32

标签: ibm-mq

当我使用C#连接WebSphere MQ而不安装MQ服务器和客户端时,我得到异常The type initializer for 'IBM.WMQ.MQQueueManager' threw an exception。我从MQ服务器添加了两个MQ dll,amqmdnet.dllamqmdxcs.dll的引用,但它不起作用。如何在不安装MQ服务器或客户端的情况下连接到MQ?谢谢!

3 个答案:

答案 0 :(得分:4)

我不建议在不安装MQ客户端库的情况下使用它们。安装可确保安装所有必需的二进制文件并在GAC中注册。不需要添加对amqmdxcs的引用。只需参考amqmdnet即可。

因此最好安装MQ客户端并运行您的应用程序。

答案 1 :(得分:2)

是的,你可以,你需要以下2个DLL:“amqmdnet.dll”和“amqmdxcs.dll”

然后你可以:

  1. 在全局程序集缓存(GAC)中注册这两个DLL
  2. 您只需将它们添加为对项目的引用
  3. 即可

    注意,但是:对于选项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'将尝试从注册表路径读取子键以填充一些变量,但是因为它它不存在,它会失败。

    对我来说,这种方法在“安装”键中不需要任何值。

答案 2 :(得分:0)

另见: .net using IBM MQ without full MQ client install

基本上从WMQ bin文件夹中获取2个dll:amqmdnet.dll& amqmdxcs.dll

我发现WMQ 7.5你需要在GAC中注册2个dll才能正常工作。你需要管理员权限来注册它们。

引用项目中的库以使用本机WMQ对象