que microsoft wcf dll windows-server-2008 msmq

wcf - microsoft - Imposible cargar DLL ''mqrt.dll''



msmq c# (3)

Esto puede deberse a que su servicio en SERVER2 se está iniciando y terminando su inicialización antes de que MSMQ termine de inicializarse. La forma más fácil de probar esto es reiniciar el servicio que aloja el punto final WCF MSMQ. Si el servicio WCF está alojado en IIS, quizás rebotar en el grupo de aplicaciones hará lo mismo, pero no estoy seguro, nunca he tratado con un punto final MSMQ hospedado por IIS.

Si reiniciar el servicio corrige su problema y su propio servicio es un servicio de Windows, puede agregar MSMQ como una dependencia de su propio servicio para que demore su inicio hasta que MSMQ esté listo. Esta respuesta en Server Fault describe cómo hacerlo. Por cierto, el servicio del que desea depender se llama "Message Queuing"

Desarrollé un Servicio WCF alojado como un Servicio de Windows y expone un punto final MSMQ.

Tengo la aplicación cliente en SERVER1, y el servicio MSMQ y WCF en SERVER2.

Cuando SERVER1 / ClientApp intenta enviar un mensaje al SERVER2 MSMQ, obtengo el siguiente error:

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)

Tanto SERVER1 como SERVER2 ejecutan Windows Server 2008 R2 Enterprise (6.1 SP1) y ambos han instalado MSMQ a través de Add Features en Server Manager.

Entiendo que falta la DLL (¡bastante obvio por el error!), Pero no tengo idea de qué debería instalar para obtener el DLL donde debería estar.

Una búsqueda en el Explorador de Windows muestra que la DLL está presente en los siguientes directorios en ambos servidores ...

  • 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

Cualquier ayuda apreciada.


No soy más sabio pero las cosas están funcionando ahora.

Después de horas en SO y Google, terminé simplemente comprobando que MSMQ estaba instalado en ambos servidores escribiendo una aplicación de consola rápida con el código capturado desde aquí ...

https://.com/a/16104212/192999

Ejecuté la aplicación de consola en Servidor1 y Servidor2 y ambos obtuve un resultado de Verdadero a IsMsmqInstalado.

Luego ejecuté mi aplicación y el error "No se pudo cargar la DLL ''mqrt.dll''" ya no se generó.

No sé si la llamada a NativeMethods.LoadLibrary("Mqrt.dll"); registrado el DLL o algo así, pero sin duda solucionó mi problema.

¡Espero que esto ayude a alguien en el futuro!


Un lado obvio; Si no tiene instalado el Feature de Windows -> Microsoft Message Queue Server (MSMQ) , recibirá este error. Simplemente vaya a Programas y características y luego active o desactive la característica de Windows .