Impossible de charger la DLL 'mqrt.dll'

J'ai développé un Service WCF qui est accueilli comme un Service Windows et expose une MSMQ point de terminaison.

J'ai l'application client sur SERVEUR1, et la MSMQ et Service WCF sur SERVER2.

Lorsque le SERVEUR1/ClientApp tente de pousser un message sur le SERVEUR2 MSMQ, j'obtiens l'erreur suivant:

    System.TypeInitializationException: The type initializer for 'System.ServiceModel.Channels.Msmq' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'mqrt.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
at System.ServiceModel.Channels.UnsafeNativeMethods.MQGetPrivateComputerInformation(String computerName, IntPtr properties)
at System.ServiceModel.Channels.MsmqQueue.GetMsmqInformation(Version& version, Boolean& activeDirectoryEnabled)
at System.ServiceModel.Channels.Msmq..cctor()
--- End of inner exception stack trace ---
at System.ServiceModel.Channels.Msmq.EnterXPSendLock(Boolean& lockHeld, ProtectionLevel protectionLevel)
at System.ServiceModel.Channels.MsmqOutputChannel.OnSend(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.OutputChannel.Send(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [7]: 
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at FacilityManager.Service.NotificationsProcessorServiceReference.INotificationsProcessor.SendNewReactiveTaskNotifications(NewReactiveTaskDataContract newReactiveTaskDataContract)

SERVER1 et SERVER2 exécutent Windows Server 2008 R2 Enterprise (6.1 SP1), et les deux ont eu MSMQ installé via l'Ajout de Fonctionnalités dans le Gestionnaire de Serveur.

Je comprends que la DLL est manquant (assez évident à partir de l'erreur!), mais je n'ai aucune idée de ce que je doit installer pour obtenir la dll où il devrait être.

Une recherche dans l'Explorateur Windows, montre que la DLL est présent dans les répertoires suivants sur les deux serveurs....

  • C:\Windows\System32
  • C:\Windows\SysWOW64
  • C:\Windows\winsxs\x86_microsoft-windows-msmq-runtime-core_31bf3856ad364e35_6.1.7601.17514_none_5768e2ad17453bd6
  • C:\Windows\winsxs\amd64_microsoft-windows-msmq-runtime-core_31bf3856ad364e35_6.1.7601.17514_none_b3877e30cfa2ad0c

Toute aide appréciée.

Tournez sur la fusion de journalisation, vous pouvez également essayer d'utiliser Dependency Walker sur vos binaires.
Aussi je vous recommande de ré-installation de msmq sur la machine client.

OriginalL'auteur ETFairfax | 2013-09-02