wcf DLL 'mqrt.dll' लोड करने में असमर्थ




windows-server-2008 msmq (3)

मैंने एक WCF सेवा विकसित की है जिसे एक विंडोज सर्विस के रूप में होस्ट किया गया है और एक MSMQ समापन बिंदु को प्रदर्शित करता है

मेरे पास सर्वर 1 पर क्लाइंट ऐप, और सर्वर 2 पर MSMQ और WCF सेवा है।

जब SERVER1 / ClientApp SERVER2 MSMQ पर एक संदेश को पुश करने का प्रयास करता है, तो मुझे निम्न त्रुटि मिलती है:

    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)

सर्वर 1 और सर्वर 2 दोनों विंडोज सर्वर 2008 आर 2 एंटरप्राइज़ (6.1 एसपी 1) चल रहे हैं, और दोनों में एमएसएमक्यू को सर्वर मैनेजर में ऐड फीचर के जरिए स्थापित किया गया है।

मैं समझता हूं कि 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

किसी भी मदद की सराहना की


एसएसईआरआर 2 पर आरंभ करने और एमएसएमक्यू को खुद आरंभ करने से पहले अपना आरम्भिकरण खत्म होने पर यह आपकी सेवा के कारण हो सकता है इसका परीक्षण करने का सबसे आसान तरीका WCF MSMQ समापन बिंदु की मेजबानी करने वाली सेवा को पुनरारंभ करना है। यदि आईआईएस में डब्लूसीएफ सेवा की मेजबानी है, शायद ऐप पूल शेखने से एक ही बात होगी, लेकिन मुझे यह सुनिश्चित करने के लिए नहीं पता है - मैंने एक आईआईएस होस्टेड एमएसएमयूएक्स एंडपेन के साथ कभी भी निपटा नहीं किया है।

अगर सेवा को पुनरारंभ करना आपकी समस्या को ठीक करता है और आपकी सेवा एक विंडोज सेवा है, तो आप MSMQ को अपनी सेवा के लिए निर्भरता के रूप में जोड़ सकते हैं, ताकि जब तक MSMQ तैयार न हो जाए, तब तक यह स्टार्टअप में देरी करेगी। सर्वर फॉल्ट पर यह उत्तर बताता है कि यह कैसे करना है। संयोग से, जिस सेवा पर आप निर्भर रहना चाहते हैं उसे "संदेश पंक्तिबद्ध" कहा जाता है


एक स्पष्ट तरफ; अगर आपके पास विंडोज़ फीचर -> माइक्रोसॉफ्ट मैसेज क्वू (एमएसएमक्यू) सर्वर स्थापित नहीं है तो आपको यह त्रुटि मिलेगी। बस प्रोग्राम और सुविधाएँ पर जाएं और फिर Windows फ़ीचर चालू या बंद करें


मैं बुद्धिमान नहीं हूँ, लेकिन अब चीजें अब काम कर रही हैं

SO और Google के घंटों के बाद, मैंने सिर्फ यह पता लगाया कि एमएसएमक्यू दोनों सर्वर पर स्थापित किया गया था, जो यहाँ से प्राप्त कोड के साथ एक त्वरित कंसोल एप्लीकेशन लिख रहा है ...

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

मैं Server1 और Server2 दोनों पर कन्सोल ऐप चलाया और दोनों IsMsmqInstalled के लिए सही के परिणाम के साथ वापस आ गया।

मैंने तब मेरा आवेदन चलाया और "DLL को लोड करने में असमर्थ 'mqrt.dll' 'त्रुटि अब उठा नहीं रही थी।

मुझे नहीं पता कि क्या NativeMethods.LoadLibrary("Mqrt.dll"); को कॉल NativeMethods.LoadLibrary("Mqrt.dll"); DLL या कुछ और पंजीकृत किया है, लेकिन यह निश्चित रूप से मेरी समस्या तय की है

मुझे उम्मीद है कि यह भविष्य में किसी को मदद करता है!