simonalexander2005
simonalexander2005

Reputation: 4577

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

When trying to connect to MQ in bindings mode (I have a server set up locally), I get the following exception:

 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)

The error occurs when trying to connect to a queue manager as follows:

Constructor:

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

And in the CreateConnectAndAddQueueManager method (where connDetails is just a store for the port, host, name, etc.):

 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

I have the following environment variable:

NMQ_MQ_LIB=mqm.dll

When I connect using a managed connection (NMQ_MQ_LIB=managed; and don't set the MQC.TRANSPORT_PROPERTY), it works fine.

Any thoughts?

--Edit--

C:\Program Files\IBM\MQSI\9.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

Upvotes: 1

Views: 5617

Answers (1)

Shashi
Shashi

Reputation: 15273

Looking at your latest comment. You have some unwanted entries in GAC. You need to do some clean up.

1) Open a command prompt.

2) Run amqiregisterdotnet.cmd /u command to unregister MQ .NET assemblies.

3) Check Windows GAC what MQ .NET assemblies. Make sure there are no MQ .NET entries. If there are some, try unregistering manually using gacutil command.

4) Then run the command amqiregisterdotnet.cmd to register the assemblies again.

Hope this helps.

Upvotes: 3

Related Questions