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.
Aussi je vous recommande de ré-installation de msmq sur la machine client.
OriginalL'auteur ETFairfax | 2013-09-02
Vous devez vous connecter pour publier un commentaire.
Évident de côté; Si vous n'avez pas le Fonctionnalité de Windows -> MSMQ (Microsoft Message Queue) Serveur installé, vous obtiendrez cette erreur. Il suffit d'aller à Programmes et Fonctionnalités et puis Windows Activer ou désactive la Fonction de.
OriginalL'auteur SChalice
Je suis pas plus avancé, mais les choses sont aujourd'hui.
Après les heures d'ouverture sur soi et sur Google, j'ai fini juste à vérifier que MSMQ a été installé sur les deux Serveurs par la rédaction d'un rapide application console avec le code saisi à partir d'ici...
https://stackoverflow.com/a/16104212/192999
J'ai couru à l'application de console sur Server1 et Server2 et à la fois il est revenu avec un résultat Vrai pour IsMsmqInstalled.
J'ai ensuite couru de ma candidature, et le "Impossible de charger la DLL 'mqrt.dll'" erreur a été de ne plus être soulevées.
Je ne sais pas si l'appel à
NativeMethods.LoadLibrary("Mqrt.dll");
enregistré le fichier DLL ou quelque chose, mais il a certainement corrigé mon problème.J'espère que cela aide quelqu'un dans le futur!
Toutes mes excuses pour la réponse tardive. Oui, les deux serveurs ont été redémarré depuis, et les services WCF ont redémarré et fonctionnent comme prévu.
Cela n'a aucun sens pour moi. Simplement vérifier si MSMQ est installé comme par magie résolu votre problème? Je suis en cours d'exécution dans la même question, et je peux voir que la MSMQ est installé et le service est en cours d'exécution. J'ai aussi vérifié que la DLL est présente sur le serveur et est la bonne version/taille/etc. Est-il possible que vous avez fait quelque chose d'autre qui pourrait avoir résolu le problème? Tels que le redémarrage du serveur, ou d'exécuter une mise à jour de Windows?
Il n'a pas de sens pour moi. Je ne me souviens pas de tout à propos de la question maintenant, mais je me souviens tout d'un coup, de travail après comme je l'ai dit dans la réponse. Nous avons déménagé loin de MSMQ/WCF et nous sommes en train de faire notre pub/sub avec RabbitMQ et les Services Windows qui, pour nos besoins, semble donc plus facile à configurer, installer et dépanner.
Pour moi, il suffit de redémarrer le serveur fixe le problème. J'ai deux machines identiques, un primaire et un fail-over. Cette erreur s'est produite de façon aléatoire (tous les 2 ou 3 fois) sur le basculement de serveur, mais a fonctionné parfaitement sur l'ordinateur principal. J'avais installé la MSMQ Fonctionnalité de Windows en tant que partie intégrante du logiciel et n'avait pas encore redémarré la machine. Apparemment, il en avait besoin, parce que maintenant, les erreurs ne se produisent plus.
OriginalL'auteur ETFairfax
Cela peut être causé par votre service sur SERVER2 de départ et de finition de son initialisation, avant de MSMQ est en fait l'initialisation de lui-même. La façon la plus simple de tester cela est de redémarrer le service d'hébergement de la WCF MSMQ point de terminaison. Si le service WCF est hébergé dans IIS, peut-être rebondir l'application de la piscine va faire la même chose, mais je ne sais pas pour vous -- je n'ai jamais eu affaire avec un IIS hébergé MSMQ point de terminaison.
Si le redémarrage du service résout votre problème et votre propre service est un service Windows, vous pouvez ensuite ajouter MSMQ comme une dépendance à votre propre service de sorte qu'il va retarder son démarrage jusqu'à ce que MSMQ est prêt. Cette réponse sur le Serveur Faute décrit comment le faire. Par ailleurs, le service que vous voulez dépend de qui est appelé "Message Queueing"
OriginalL'auteur bvoyelr