'IBM.WMQ.Nmqi.BindingsNmqiMQ' 的类型初始值设定项抛出异常

The type initializer for 'IBM.WMQ.Nmqi.BindingsNmqiMQ' threw an exception

尝试以绑定模式连接到 MQ 时(我在本地设置了一个服务器),出现以下异常:

 System.TypeInitializationException: The type initializer for 'IBM.WMQ.Nmqi.BindingsNmqiMQ' threw an exception. ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at IBM.WMQ.Nmqi.NativeManager.InitializeNativeApis(String mode)
   at IBM.WMQ.Nmqi.BindingsNmqiMQ..cctor()
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at System.Reflection.Assembly.CreateInstance(String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at IBM.WMQ.Nmqi.NmqiEnvironment.GetInstance(String name)
   at IBM.WMQ.Nmqi.NmqiEnvironment.GetMQI(Int32 id)
   at IBM.WMQ.MQQueueManager.Connect(String queueManagerName)
   at IBM.WMQ.MQQueueManager..ctor(String queueManagerName, Hashtable properties)
   at Project.MQConnector.CreateConnectAndAddQueueManager(QueueManagerConnectionDetails connDetails)

尝试连接到队列管理器时出现如下错误:

构造函数:

Friend queueManagerConnectionProperties As New Hashtable()
queueManagerConnectionProperties.Add(MQC.THREAD_AFFINITY_PROPERTY, True)
If My.Settings.MQConnectAsClient Then
    queueManagerConnectionProperties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_CLIENT)
Else
    queueManagerConnectionProperties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_BINDINGS)
End If

queueManagerConnectionProperties.Add(MQC.CONNECT_OPTIONS_PROPERTY, MQC.MQCNO_HANDLE_SHARE_BLOCK Or MQC.MQCNO_RECONNECT_Q_MGR) ' have handle-sharing with call blocking

并且在 CreateConnectAndAddQueueManager 方法中(其中 connDetails 只是存储端口、主机、名称等):

 Dim specificQMConnProperties As Hashtable = CType(queueManagerConnectionProperties.Clone(), Hashtable)
 specificQMConnProperties.Add(MQC.CHANNEL_PROPERTY, connDetails.Channel)
 specificQMConnProperties.Add(MQC.CONNECTION_NAME_PROPERTY, connectionName)
 Dim qmgr As MQQueueManager = Nothing

 Try
     qmgr = New MQQueueManager(connDetails.Name, specificQMConnProperties)
 Catch ex As MQException
     ' error handling
 End Try

我有以下环境变量:

NMQ_MQ_LIB=mqm.dll

当我使用托管连接(NMQ_MQ_LIB=managed;并且不设置 MQC.TRANSPORT_PROPERTY)连接时,它工作正常。

有什么想法吗?

--编辑--

C:\Program Files\IBM\MQSI.0.0.2>dspmqver -a
Name:        WebSphere MQ
Version:     7.5.0.6
Level:       p750-006-160226
BuildType:   IKAP - (Production)
Platform:    WebSphere MQ for Windows
Mode:        32-bit
O/S:         Windows 7 Enterprise x64 Edition, Build 7601: SP1
InstName:    Installation1
InstDesc:
Primary:     No
InstPath:    C:\Program Files (x86)\IBM\WebSphere MQ
DataPath:    C:\Program Files (x86)\IBM\WebSphere MQ
MaxCmdLevel: 750
LicenseType: Production
AMQ8351: WebSphere MQ Java environment has not been configured correctly.
AMQ8351: WebSphere MQ Java environment has not been configured correctly.

Name:        IBM WebSphere MQ custom channel for Windows Communication Foundation
Version:     7.5.0.6
Level:       wn750-006-151116
Build Type:  Production


Name:        IBM Message Service Client for .NET (XMS .NET)
Version:     2.5.0.6
Level:       nn250-006-151116
Build Type:  Production


Name:        IBM Global Security Kit for WebSphere MQ
Version:     8.0.14.53
Build Type:  Production
Mode:        32-bit

Name:        IBM Global Security Kit for WebSphere MQ
Version:     8.0.14.53
Build Type:  Production
Mode:        64-bit

正在查看您的最新评论。您在 GAC 中有一些不需要的条目。你需要做一些清理工作。

1) 打开命令提示符。

2) 运行 amqiregisterdotnet.cmd /u 命令注销 MQ .NET 程序集。

3) 检查 Windows GAC 有哪些 MQ .NET 程序集。确保没有 MQ .NET 条目。如果有,请尝试使用 gacutil 命令手动取消注册。

4) 然后运行命令amqiregisterdotnet.cmd再次注册程序集。

希望这对您有所帮助。