2012-04-18 2 views
5

Когда я подключаю WebSphere MQ с помощью C# без установки сервера и клиента MQ, я получаю исключение The type initializer for 'IBM.WMQ.MQQueueManager' threw an exception. Я добавляю ссылку на два MQ dlls, amqmdnet.dll и amqmdxcs.dll с сервера MQ, но это не работает. Как подключиться к MQ без установки сервера MQ или клиента? Спасибо!Инициализатор типа для IBM.WMQ.MQQueueManager генерирует исключение

ответ

3

Я не рекомендую использовать клиентские библиотеки MQ, не устанавливая их. Установка гарантирует, что все необходимые исполняемые файлы будут установлены и зарегистрированы в GAC. Добавление ссылки на amqmdxcs не требуется. Просто ссылки на amqmdnet достаточно.

Так что лучше установить клиент MQ и запустить приложение.

+0

Огромное спасибо! Я подтвердил, что он не работает (бросить исключение TypeInitializationException при новом QMQueue()) без установки клиента MQ. Но это клиентское приложение, если каждый компьютер, использующий приложение, должен установить клиент MQ (это не мало), я думаю, что это не удобно и неэффективно. Может быть, есть лучшее решение. –

+0

IBM не предоставляет * поддерживаемую * конфигурацию, меньшую, чем полная установка клиента. Если это важно для вас, перейдите на страницу https://www.ibm.com/developerworks/rfe/ и отправьте запрос на улучшение с просьбой о пакете установки клиента с небольшим размером.Затем другие люди могут голосовать по этому требованию, и IBM увидит, что она популярна (или нет) и расставляет приоритеты соответственно. (Я ожидаю, что это будет очень популярно, основываясь на отзывах здесь и на других форумах, но никто еще не вошел в RFE, чтобы его оттолкнуть.) –

+0

Большое вам спасибо! Это решение, но может потребоваться много времени. –

0

Смотри также: .net using IBM MQ without full MQ client install

в основном захватить 2 DLLs из папки WMQ бен: amqmdnet.dll & amqmdxcs.dll

я нашел для WMQ 7,5 Вы должны зарегистрировать 2 библиотеки DLL в GAC чтобы он работал правильно. вам необходимо пропустить регистрацию.

ссылка библиотеки в вашем проекте, чтобы использовать родной WMQ объекты

0

Да, вы можете, вам понадобятся следующие 2 библиотеки DLL: «amqmdnet.dll» и «amqmdxcs.dll»

Вы можете затем:

  1. Регистрация этих 2 библиотек в глобальном кэше сборок (GAC)
  2. Вы можете просто добавить их как ссылки на ваш проект

Примечание, однако: Для варианта 2 вам необходимо убедиться, что существует путь реестра «HKEY_LOCAL_MACHINE \ SOFTWARE \ IBM \ WebSphere MQ \ Installation».

Если он не существует и DLL файлы не находятся в GAC, вы получите следующие исключения:

System.TypeInitializationException: Тип инициализатор «» IBM.WMQ.MQQueueManager бросил исключение. -> System.TypeInitializationException: инициализатор типа для «IBM.WMQ.CommonServices» сделал исключение. -> System.NullReferenceException: ссылка на объект не установлена ​​в экземпляр объекта.

Это потому, что если не в GAC, «amqmdxcs.dll», который содержит «IBM.WMQ.CommonServices», попытается прочитать под-ключи из пути реестра, чтобы заполнить некоторые переменные, но поскольку он не существует, он потерпит неудачу.

Для меня этот подход работает без каких-либо значений в ключе «Установка».

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