2016-06-10 2 views
0

При попытке подключения к MQ в режиме привязок (У меня есть сервер настроить локально), я получаю следующее исключение:Тип инициализатор «» IBM.WMQ.Nmqi.BindingsNmqiMQ бросил исключение

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) 

ошибка возникает при попытке подключиться к менеджеру очередей следующим образом:

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 

И в методе 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), он отлично работает.

Любые мысли?

--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 
+0

У вас есть полностью установленный клиент MQ или работает только с amqmdnet.dll? – Shashi

+0

У меня установлен полный MQ (в частности, 7.5.0.6 - обновлен от 7.5.0.1, который появился с помощью инструментария IIB) – simonalexander2005

+0

ЕСЛИ вы можете дать мне способ более точно проверить, что я установил, что может быть полезно – simonalexander2005

ответ

1

Глядя на ваш последний комментарий. У вас есть нежелательные записи в GAC. Вам нужно немного почистить.

1) Откройте командную строку.

2) Запустите команду amqiregisterdotnet.cmd /u, чтобы отменить регистрацию сборников MQ .NET.

3) Проверьте Windows GAC, какие сборки MQ .NET. Убедитесь, что нет записей MQ .NET. Если они есть, попробуйте разархивировать вручную, используя команду gacutil.

4) Затем запустите команду amqiregisterdotnet.cmd для регистрации сборок снова.

Надеюсь, это поможет.

+0

Я получаю следующую ошибку при выполнении этой команды (из консоли интеграции IIB): «C: \ Windows \ WinSxS \ x86_microsoft.vb80.mfc_1fc8b3b9a1e183eb_8.0.50727.6195_none_cbf5e994470a1a8f \ MCF80U.dll либо не предназначен для работы в Windows или он содержит ошибку. Попробуйте снова установить программу с использованием исходного установочного носителя или обратитесь к системному администратору или поставщику программного обеспечения для поддержки « – simonalexander2005

+0

для amqidnet.exe в заголовке сообщения. Появляется пять или шесть раз – simonalexander2005

+0

Вы используете неправильную команду. Вам нужно запустить команду amqiregisterdotnet.cmd, как указано выше. – Shashi

Смежные вопросы