2013-09-02 50 views
7

私はWindowsサービスとしてホストされ、MSMQエンドポイントを公開するWCFサービスを開発しました。DLL 'mqrt.dll'を読み込めません

私はクライアントアプリケーションをSERVER1に、MSMQとWCFサービスをSERVER2に持っています。

SERVER1/ClientAppがSERVER2 MSMQの上でメッセージをプッシュしようとすると、私は次のようerrrorを得る:

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とSERVER2の両方が、Windowsサーバー2008 R2エンタープライズ(6.1 SP1)を実行していると、どちらも、サーバーマネージャーの機能の追加を使用してMSMQをインストールしています。

私は、DLLが見つからないことを理解していますが(エラーからはっきりしています!)、どこにインストールする必要があるのか​​分かりません。

Windowsエクスプローラの検索はDLLが両方のサーバー上で次のディレクトリに存在していることを示して

....

  • C:\ WINDOWS \ System32に
  • C:\ WINDOWS \ SYSWOW64
  • C:\ WINDOWS \ winsxs \ん。X86 microsoft-WindowsのMSMQ-ランタイムcore_31bf3856ad364e35_6.1.7601.17514_none_5768e2ad17453bd6
  • C:\ WINDOWS \ winsxs \ん。Amd64 microsoft-WindowsのMSMQ-ランタイムcore_31bf3856ad364e35_6.1.7601.17514_none_b3877e30cfa2ad0c

助けてください。

+0

フュージョンロギングをオンにし、バイナリで[Dependency Walker](http://www.dependencywalker.com/)を使用することもできます。 –

+0

また、クライアントマシンにmsmqを再インストールすることをお勧めします。 –

答えて

4

私は誰も賢明ではないが、現在作業中である。 SOとGoogle、私はちょうどMSMQがコードで迅速なコンソールアプリケーションを書き込むことにより、両方のサーバーにインストールされたことを確認し、ここからつかんで終わった上時間後

...

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

私は走りましたServer1とServer2の両方にコンソールアプリケーションがあり、両方がTrueになってIsMsmqInstalledに戻りました。

私のアプリケーションを実行し、 "DLL 'mqrt.dll'をロードできませんでした"というエラーは発生しなくなりました。

NativeMethods.LoadLibrary("Mqrt.dll");への呼び出しでDLLや何かが登録されているかどうかわかりませんが、私の問題は解決しました。

これは将来的に誰かを助けてくれることを願っています!

+0

両方のマシンをリブートしてもまだ動作しますか? –

+0

@JohnBreakwell - 遅い返信のお詫び。はい、両方のサーバーが再起動され、WCFサービスが再起動して正常に動作しています。 – ETFairfax

+0

これは私には意味がありません。 MSMQがインストールされているかどうかを確認するだけで問題は解決しますか?私は同じ問題を抱えており、MSMQ機能がインストールされ、サービスが実行されていることがわかります。私はまた、DLLがサーバー上に存在し、正しいバージョン/サイズ/などであることを確認しました。問題を修正した可能性がありますか?そのようなサーバーを再起動するか、Windowsの更新プログラムを実行しますか? –

1

これは、MSMQの初期化が完了する前に、SERVER2が初期化を開始して終了したために発生する可能性があります。これをテストする最も簡単な方法は、WCF MSMQエンドポイントをホストするサービスを再起動することです。 WCFサービスがIISでホストされている場合、おそらくアプリケーションプールをバウンスすることで同じことが実行されますが、わかりません。IISでホストされているMSMQエンドポイントを決して扱っていません。

サービスを再起動すると問題が解決し、独自のサービスがWindowsサービスである場合は、MSMQの準備が整うまで、MSMQを自分のサービスに依存関係として追加して起動を遅らせることができます。 Thisサーバーフォールトの回答は、その方法を説明しています。ちなみに、依存したいサービスは「メッセージキュー」と呼ばれます。

16

明白な脇にあります。 Windows Feature - > Microsoft Message Queue(MSMQ)Serverがインストールされていないと、このエラーが発生します。 プログラムと機能Windows機能を有効または無効にします

+0

...これは助けました... – Nova

関連する問題