2016-06-10 9 views
0

Beim Versuch, MQ in Bindungen Modus (Ich habe einen Server einrichten lokal) zu verbinden, erhalte ich die folgende Ausnahme:Die Typeninitialisierer für ‚IBM.WMQ.Nmqi.BindingsNmqiMQ‘ hat eine Ausnahme

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) 

der Fehler tritt auf, wenn zu einem WS-Manager versucht, eine Verbindung wie folgt:

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 

Und in der CreateConnectAndAddQueueManager Methode (wo connDetails ist nur ein Geschäft für die p ort, 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 

Ich habe die folgende Umgebungsvariable:

NMQ_MQ_LIB=mqm.dll 

Wenn ich eine Verbindung mit einer verwalteten Verbindung (NMQ_MQ_LIB=managed; und setzen Sie nicht die MQC.TRANSPORT_PROPERTY), es funktioniert gut.

Irgendwelche Gedanken?

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

Haben Sie einen vollständigen MQ-Client installiert oder läuft nur mit amqmdnet.dll? – Shashi

+0

Ich habe die vollständige MQ installiert (speziell 7.5.0.6 - aktualisiert von 7.5.0.1, die mit IIB Toolkit kam) – simonalexander2005

+0

Wenn Sie mir eine Möglichkeit geben können, genauer zu überprüfen, was ich installiert habe, könnte das hilfreich sein – simonalexander2005

Antwort

1

bei Ihrem letzten Kommentar der Suche. Sie haben einige unerwünschte Einträge in GAC. Sie müssen etwas aufräumen.

1) Öffnen Sie eine Eingabeaufforderung.

2) Führen Sie den Befehl amqiregisterdotnet.cmd /u aus, um die Registrierung von MQ .NET-Assemblies aufzuheben.

3) Überprüfen Sie Windows GAC, was MQ .NET Assemblies. Stellen Sie sicher, dass keine MQ .NET-Einträge vorhanden sind. Wenn einige vorhanden sind, versuchen Sie, die Registrierung manuell aufzuheben, indem Sie den Befehl gacutil verwenden.

4) Führen Sie anschließend den Befehl amqiregisterdotnet.cmd aus, um die Baugruppen erneut zu registrieren.

Hoffe, das hilft.

+0

Ich bekomme den folgenden Fehler beim Ausführen dieses Befehls (von einer IIB-Integrationskonsole): "C: \ Windows \ WinSxS \ x86_microsoft.vb80.mfc_1fc8b3b9a1e183eb_8.0.50727.6195_none_cbf5e994470a1a8f \ MCF80U.dll ist entweder nicht für die Ausführung unter Windows konzipiert oder es enthält einen Fehler Versuchen Sie, das Programm erneut zu installieren, indem Sie das Original-Installationsmedium verwenden, oder wenden Sie sich an Ihren Systemadministrator oder den Softwarehersteller für Unterstützung " – simonalexander2005

+0

für amqidnet.exe, in der Kopfzeile der Nachricht. Es erscheint fünf oder sechs Mal – simonalexander2005

+0

Sie verwenden falschen Befehl. Sie müssen den Befehl amqiregisterdotnet.cmd wie oben erwähnt ausführen. – Shashi