2011-06-10 9 views
20

पर लिखना ठीक है, यहां एक बहुत ही सरल और मौलिक सवाल है। यदि मेरे पास विंडोज़ मशीन ए पर एक एप्लीकेशन है जो विंडोज मशीन बी पर कतार में लिखना चाहता है, तो क्या मुझे मशीन ए पर एमएसएमक्यू स्थापित करना होगा (भले ही वहां कोई कतार नहीं है)? मैं बस अपने अनुप्रयोगों के लिए कतारों का उपयोग करना शुरू कर रहा हूं और कुछ बुनियादी सिद्धांतों को समझने की कोशिश कर रहा हूं।रिमोट एमएसएमक्यू

धन्यवाद

उत्तर

34

हाँ, आप की जरूरत MSMQ स्थानीय स्तर पर स्थापित किसी दूरस्थ कतार में लिखने के लिए। यदि आप एक निजी कतार में लिख रहे हैं, तो this page पर एक नज़र डालें जिसमें कतार नाम को प्रारूपित करने के तरीके पर उपयोगी जानकारी है। यदि आप किसी दूरस्थ लेन-देन की कतार के लिए लिख रहे हैं, तो आप सुनिश्चित करें कि आप सही ढंग से (बिंदु 5)

यह लेख पाठ है निर्दिष्ट करने की जरूरत है:

1. जब दूरस्थ कतारों के साथ काम करने, machinename\private$\queuename प्रारूप में कतार का नाम काम नहीं करता है। इसका परिणाम "अवैध कतार पथ" त्रुटि में होता है।

2. कतार का नाम FormatName:Direct=OS:machinename\\private$\\queuename के रूप में उल्लेख किया जाना चाहिए।

यह आवश्यक है क्योंकि कतार का उपयोग आंतरिक रूप से नाम वाक्यविन्यास प्रारूप का उपयोग करके किया जाता है। अन्य अनुकूल प्रतिनिधित्व को स्वरूपनाम में परिवर्तित किया गया है और फिर इसका उपयोग किया जाता है। रिमोट कतारों के साथ काम करते समय, कतार नाम को हल करने के लिए एक एडी है, दोस्ताना नाम काम नहीं करेगा। विवरण के लिए दस्तावेज देखें।

उदाहरण के लिए।

MessageQueue rmQ = new MessageQueue 
       ("FormatName:Direct=OS:machinename\\private$\\queue"); 
rmQ.Send("sent to regular queue - Atul"); 

3. पिछले बिंदु के आगे, ध्यान दें कि स्वरूपनाम केस संवेदनशील है। यदि आप FORMATNAME:Direct=OS:machinename\\private$\\queuename के रूप में पहले स्ट्रिंग का उल्लेख करते हैं, तो यह काम नहीं करेगा। हैरानी की बात है कि इस मामले में कोई त्रुटि नहीं है। स्ट्रिंग का "FormatName" भाग एकमात्र मामला संवेदनशील भाग लगता है। अन्य अलग-अलग मामले में दिखाई दे सकते हैं। उदाहरण के लिए। आप "प्रत्यक्ष" लिख सकते हैं।

4. यदि आप मशीन के आईपी पते का उपयोग करना चाहते हैं तो वाक्यविन्यास FormatName:Direct=TCP:ipaddress\\private$\\queuename होगा।

उदाहरण के लिए।

MessageQueue rmQ = new MessageQueue 
       ("FormatName:Direct=TCP:121.0.0.1\\private$\\queue"); 
rmQ.Send("sent to regular queue - Atul"); 

5. कतार उदाहरण आप कोड कतार आप के लिए संदेश भेजने के लिए कोशिश कर रहे हैं के साथ मैच चाहिए में बनाने के लेन-देन संबंधी गुण। तो पहले के उदाहरणों में, मैं गैर-लेनदेन कतार में संदेश भेज रहा था। एक लेन-देन संबंधी कतार में भेजने के लिए, कोड

MessageQueue rmTxnQ = new MessageQueue 
      ("FormatName:Direct=OS:machinename\\private$\\queue"); 
rmTxnQ.Send("sent to Txn queue - Atul", MessageQueueTransactionType.Single); 

होगा व्यवहार गुण मेल नहीं खाते, संदेश वितरित नहीं किया जाएगा। आश्चर्यजनक हिस्सा फिर से है, मुझे कोई त्रुटि नहीं मिली, और संदेश गायब हो गया

6. अंत में, जब आप दूरस्थ कतार में संदेश भेजते हैं, तो आपकी मशीन पर एक अस्थायी आउटगोइंग कतार बनाई जाती है। इसका उपयोग के मामले में किया जाता है, रिमोट कतार अनुपलब्ध है। यदि आप कंप्यूटर प्रबंधन कंसोल (compmgmt) पर जाते हैं।एमएससी), और सेवाओं और अनुप्रयोगों का विस्तार/ संदेश कतार/आउटगोइंग कतार, आप इन कतारों को देखेंगे। कंसोल के दाहिने तरफ राज्य को (कनेक्ट या नहीं) और अगली हॉप के लिए आईपी पता (एसएस) सहित विवरण दिखाएगा।

+0

हाँ, कि मैं क्या सोचा है । मैं बस इसे किसी और से सुनना चाहता था। मैं निजी कतारों का उपयोग कर रहा हूं (पहले से ही प्रारूप भाग किया गया है)। ग्रिफफाइंडर के लिए एक अंक! –

+0

उपरोक्त सेटिंग्स (अधिकार और एमएसएमक्यू स्थापना) के अनुसार परिवर्तन किए जाने के बाद: queue.send(): ठीक काम कर रहा है। लेकिन या तो queue.receive() या queue.getMessageEnumerator2() काम नहीं कर रहा है। क्या तुम मेरी मदद कर सकते हो?? मैं इसे अपनी स्थानीय मशीन (एमएसएमक्यू घटक स्थापित) में परीक्षण कर रहा हूं। – watraplion

+0

@ वाटर्राप्लियन आपको एक नया प्रश्न पूछना चाहिए। – stuartd

1

दूसरा (क्लाइंट चलाने वाली स्थानीय मशीन पर एमएसएमक्यू स्थापित करने के बजाय) एक डब्ल्यूसीएफ सेवा लागू करना होगा जो एमएसएमक्यू कतार से अपने संदेश लेता है। उस स्थिति में, आपके रिमोट क्लाइंट को रिमोट कतार में सीधे लिखने के लिए केवल दूरस्थ सेवा एंडपॉइंट निर्दिष्ट करना होगा। आपको सावधान रहना होगा कि रिमोट कतार पर सुरक्षा सही ढंग से सेट की गई थी।

मुझे लगता है कि यह कतार-आधारित संचार को लागू करने का एक बेहतर तरीका होगा। यह एक छोटा सा जवाब है, लेकिन यदि आप रुचि रखते हैं तो मैं खुशी से विस्तार करूंगा (मैंने देखा है कि आप दूसरे उत्तर से बहुत खुश थे :)

+0

आप डब्ल्यूसीएफ बात कर रहे हैं? –

+0

हां। क्या यह कोई समस्या है? – Rendition

+0

नहीं, मैं सिर्फ स्पष्टीकरण चाहता था। आपकी प्रस्तावित डब्ल्यूसीएफ सेवा एमएसएमक्यू एकीकरण का उपयोग नहीं कर रही है, है ना? यह बस एमएसएमक्यू संदेशों का उपभोग करने के लिए होता है। –

6

सभी एमएसएमक्यू संचार को प्रत्येक छोर पर एक एमएसएमक्यू कतार प्रबंधक की आवश्यकता होती है। एमएसएमक्यू-उपयोग अनुप्रयोग अपने स्थानीय कतार प्रबंधक के साथ संवाद करते हैं जो उनके लिए काम करता है। एमएसएमक्यू-उपयोग अनुप्रयोग किसी भी कतार, स्थानीय या दूरस्थ के साथ सीधे संवाद नहीं कर सकते हैं।

0
प्रारूप नीचे

हमारे लिए काम किया

key="PublicQueueName" value="FormatName:Direct=TCP:192.168.12.58\private$\myqueue" 

इसके अलावा, आप दूरस्थ कतार पहुँच अनुमतियाँ देने के लिए की आवश्यकता होगी

सुरक्षा: अनुमति दें Anonymus लॉगिन

enter image description here