Quando collego WebSphere MQ utilizzando C# senza installare server MQ e client, ottengo l'eccezione The type initializer for 'IBM.WMQ.MQQueueManager' threw an exception
. Aggiungo il riferimento di due DLL MQ, amqmdnet.dll
e amqmdxcs.dll
dal server MQ, ma non funziona. Come posso connettermi a MQ senza installare il server o il client MQ? Grazie!Inizializzatore di tipo per IBM.WMQ.MQQueueManager genera un'eccezione
risposta
Non è consigliabile utilizzare le librerie client MQ senza installarle. L'installazione assicura che tutti i file binari richiesti siano installati e registrati con GAC. L'aggiunta di un riferimento ad amqmdxcs non è richiesta. Basta solo un riferimento ad amqmdnet.
Quindi è meglio installare il client MQ ed eseguire l'applicazione.
vedi anche: .net using IBM MQ without full MQ client install
fondamentalmente afferrare il 2 dll dalla cartella bin WMQ: amqmdnet.dll & amqmdxcs.dll
che ho trovato per WMQ 7.5 è necessario registrare i 2 DLL nella GAC perché funzioni correttamente hai bisogno di un amministratore per registrarli.
il riferimento delle librerie nel progetto di utilizzare la WMQ nativo oggetti
Sì, è possibile, è necessario il seguente 2 DLL: "amqmdnet.dll" e "amqmdxcs.dll"
Puoi allora o:
- registrare questi 2 DLL nella Global Assembly cache (GAC)
- si può semplicemente aggiungere come riferimenti al progetto
Nota, tuttavia: per l'opzione 2 è necessario assicurarsi che il percorso del registro "HKEY_LOCAL_MACHINE \ SOFTWARE \ IBM \ WebSphere MQ \ Installation" esista.
Se non esiste e le DLL di non sono nella GAC si ottengono le seguenti eccezioni:
System.TypeInitializationException: L'inizializzatore di tipo per 'IBM.WMQ.MQQueueManager' ha generato un'eccezione. -> System.TypeInitializationException: l'inizializzatore del tipo per 'IBM.WMQ.CommonServices' ha generato un'eccezione. -> System.NullReferenceException: il riferimento all'oggetto non è impostato su un'istanza di un oggetto.
Questo perché, quando non è in GAC, "amqmdxcs.dll" che contiene "IBM.WMQ.CommonServices" proverà a leggere le sottochiavi dal percorso del registro per riempire alcune variabili, ma poiché non esiste, fallirà.
Per me, questo approccio funziona senza richiedere valori nella chiave "Installazione".
Grazie mille! Ho comfirmed che non funziona (gettare la TypeInitializationException quando nuovi QMQueue()) senza installare MQ client.But questa è un'applicazione client, se ogni computer utilizzando l'applicazione deve installare il client MQ (non è piccolo), penso che non sia conveniente e inefficiente. Forse c'è una soluzione migliore. –
IBM non fornisce una configurazione * supportata * più piccola dell'installazione completa del client. Se questo è importante per te, vai su https://www.ibm.com/developerworks/rfe/ e invia una richiesta di miglioramento chiedendo un pacchetto di installazione client supportato di dimensioni ridotte.Altre persone possono quindi votare su tale requisito e IBM vedrà che è popolare (o meno) e dà la priorità di conseguenza. (Mi aspetto che questo sia molto popolare, basato sul feedback qui e su altri forum ma nessuno ha ancora inserito la RFE per dargli il via.) –
Grazie mille! Questa è una soluzione, ma potrebbe essere necessario molto tempo. –