Когда я подключаю 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 генерирует исключение
ответ
Я не рекомендую использовать клиентские библиотеки MQ, не устанавливая их. Установка гарантирует, что все необходимые исполняемые файлы будут установлены и зарегистрированы в GAC. Добавление ссылки на amqmdxcs не требуется. Просто ссылки на amqmdnet достаточно.
Так что лучше установить клиент MQ и запустить приложение.
Смотри также: .net using IBM MQ without full MQ client install
в основном захватить 2 DLLs из папки WMQ бен: amqmdnet.dll & amqmdxcs.dll
я нашел для WMQ 7,5 Вы должны зарегистрировать 2 библиотеки DLL в GAC чтобы он работал правильно. вам необходимо пропустить регистрацию.
ссылка библиотеки в вашем проекте, чтобы использовать родной WMQ объекты
Да, вы можете, вам понадобятся следующие 2 библиотеки DLL: «amqmdnet.dll» и «amqmdxcs.dll»
Вы можете затем:
- Регистрация этих 2 библиотек в глобальном кэше сборок (GAC)
- Вы можете просто добавить их как ссылки на ваш проект
Примечание, однако: Для варианта 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», попытается прочитать под-ключи из пути реестра, чтобы заполнить некоторые переменные, но поскольку он не существует, он потерпит неудачу.
Для меня этот подход работает без каких-либо значений в ключе «Установка».
- 1. Инициализатор типа для 'NameSpace.Settings' выбрал исключение
- 2. Типа инициализатор «» Google.Apis.Json.NewtonsoftJsonSerializer бросил исключение
- 3. Инициализатор типа для «Realms.Realm» выбрал исключение
- 4. Инициализатор типа для Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment выбрал исключение
- 5. Инициализатор типа для «OSGeo.OSR.OsrPINVOKE» выбрал исключение
- 6. Инициализатор типа для «Neo4jClient.GraphClient» выбрал исключение
- 7. MongoDB - Инициализатор типа для «MongoDB.Bson.ObjectId» бросил исключение
- 8. Инициализатор типа для «System.Web.Http.GlobalConfiguration» выбрал исключение
- 9. Инициализатор типа для «MimeKit.ParserOptions» выбрал исключение
- 10. Инициализатор типа для 'Nuget.Proxy Cache' выбрал исключение
- 11. C# Инициализатор типа для «Google.Apis.Json.NewtonsoftJsonSerializer» выбрал исключение
- 12. Инициализатор типа для 'Emgu.CV.CvInvoke' выбрал исключение
- 13. Инициализатор типа для Microsoft.Web.Deployment.DeploymentManager выбрал исключение
- 14. Инициализатор типа для объекта бросил исключение
- 15. Инициализатор типа для Form1 выбрал исключение
- 16. Инициализатор типа для 'Emgu.CV.CvInvoke' бросил исключение
- 17. Инициализатор типа для «Microsoft.DataTransformationServices.Project.SharedIcons» выбрал исключение
- 18. Инициализатор типа для 'gdcm.gdcmPINVOKE' бросил исключение
- 19. Инициализатор типа для «NHibernate.Cfg.Configuration» выбрал исключение
- 20. Инициализатор типа для «LibSassNetProxy.SassCompilerProxy» выбрал исключение
- 21. Инициализатор типа для «System.Management.Automation.Runspaces.InitialSessionState» выбрал исключение
- 22. Инициализатор типа для 'Crypto' выбрал исключение
- 23. Инициализатор типа для «System.Web.Mvc.ViewEngines» выбрал исключение
- 24. Инициализатор типа для «DotNetOpenAuth.Logger» выбрал исключение
- 25. System.TypeInitializationException: инициализатор типа для Oracle.DataAccess.Client.OracleConnection выбрал исключение
- 26. Инициализатор типа для «PublicDomain.TzTimeZone» выбрал исключение
- 27. Инициализатор типа для «Microsoft.PointOfService.Management.Explorer» выбрал исключение
- 28. Инициализатор типа для 'WebSupergoo.ABCpdf7.Internal.NDoc' выбрал исключение
- 29. Инициализатор типа для «System.ServiceModel.Diagnostics.TraceUtility» выбрал исключение
- 30. Инициализатор типа для «Модуля» выбрал исключение
Огромное спасибо! Я подтвердил, что он не работает (бросить исключение TypeInitializationException при новом QMQueue()) без установки клиента MQ. Но это клиентское приложение, если каждый компьютер, использующий приложение, должен установить клиент MQ (это не мало), я думаю, что это не удобно и неэффективно. Может быть, есть лучшее решение. –
IBM не предоставляет * поддерживаемую * конфигурацию, меньшую, чем полная установка клиента. Если это важно для вас, перейдите на страницу https://www.ibm.com/developerworks/rfe/ и отправьте запрос на улучшение с просьбой о пакете установки клиента с небольшим размером.Затем другие люди могут голосовать по этому требованию, и IBM увидит, что она популярна (или нет) и расставляет приоритеты соответственно. (Я ожидаю, что это будет очень популярно, основываясь на отзывах здесь и на других форумах, но никто еще не вошел в RFE, чтобы его оттолкнуть.) –
Большое вам спасибо! Это решение, но может потребоваться много времени. –