2012-03-21 6 views
12

मैंने देव सर्वर पर मौजूद सार्वजनिक और निजी कतारों को लिखने के लिए एक नमूना अनुप्रयोग लिखा है। मेरे पास मेरी स्थानीय मशीन पर संदेश कतार स्थापित नहीं है।एमएसएमक्यू - इस कंप्यूटर पर संदेश कतार स्थापित नहीं किया गया है

मुझे त्रुटि मिल रही है: इस कंप्यूटर पर संदेश कतार स्थापित नहीं किया गया है।

त्रुटि इस लाइन पर है:

MessageQueue.Exists(queueName) 

यहाँ पूर्ण परीक्षण कोड, सभी टिप्पणी की है और कोई टिप्पणी नहीं निजी और सार्वजनिक कतारों एक ही त्रुटि में परिणाम कर रहे हैं। मुझसे यहां क्या गलत हो रहा है?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

using System.Messaging; 

namespace MsmqTest 
{ 
    public partial class Form1 : Form 
    { 
     //@"DIRECT=OS:devbox01\PRIVATE$\PrivateQueueDev"; 
     //@"DIRECT=TCP:192.168.6.102\PRIVATE$\PrivateQueueDev"; 
     private const string QueueName = @"DIRECT=TCP:192.168.6.102\PRIVATE$\PrivateQueueDev"; 


     //@"DIRECT=OS:devbox01\PublicQueueDev"; 
     //@"DIRECT=TCP:192.168.6.102\PublicQueueDev"; 
     private const string QueueNamePublic = @"DIRECT=TCP:192.168.6.102\PublicQueueDev"; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Write_Click(object sender, EventArgs e) 
     { 
      MessageQueue msgQ; 
      string msgText = String.Format("Message: {0}", DateTime.Now); 
      try 
      { 
       msgQ = GetQ(QueueNamePublic); 
       msgQ.Send(msgText); 
      } 
      catch (Exception ex) 
      { 
       throw new Exception(ex.Message); 
      } 
     } 

     private void Read_Click(object sender, EventArgs e) 
     { 

     } 

     private MessageQueue GetQ(string queueName) 
     { 
      MessageQueue msgQ; 

      if(!MessageQueue.Exists(queueName)) 
      { 
       try 
       { 
        msgQ = MessageQueue.Create(queueName); 
       } 
       catch (Exception ex) 
       { 
        throw new Exception("Error creating queue", ex); 
       } 
      } 
      else 
      { 
       try 
       { 
        msgQ = new MessageQueue(queueName); 
       } 
       catch (Exception ex) 
       { 
        throw new Exception("Error getting queue", ex); 
       } 
      } 
      return msgQ; 
     } 

    } 
} 

उत्तर

14

आपको उन सभी मशीनों पर एमएसएमक्यू स्थापित करने की आवश्यकता है जो संदेशों के संचरण और स्वागत में भाग लेना चाहते हैं। इसमें इस उदाहरण में आपकी स्थानीय मशीन जैसी मशीनें भेजना शामिल है।

इसका कारण एमएसएमक्यू का उपयोग करने वाले स्टोर-एंड-फॉरवर्ड मैसेजिंग पैटर्न की वजह से है।

http://en.wikipedia.org/wiki/Store_and_forward

क्या वास्तव में जब आप अपने सर्वर के लिए एक संदेश "भेजें" हो रहा है:

  1. स्थानीय कतार प्रबंधक एक स्थानीय अस्थायी कतार में संदेश लिखता है।
  2. स्थानीय कतार प्रबंधक रिमोट कतार प्रबंधक से जुड़ता है।
  3. संदेश प्रेषित किया गया है।
  4. रिमोट कतार प्रबंधक रिमोट कतार में संदेश लिखता है।
+0

तो मेरे विकल्प यहां क्या हैं? मैं इसे उपयोगकर्ता मशीन पर स्थापित नहीं करना चाहता हूं तो संदेश भेज रहा होगा। क्या मैं डब्ल्यूसीएफ का उपयोग कर सकता हूं? क्या आप मुझे कुछ नमूना कोड पर इंगित कर सकते हैं जो मदद कर सकता है? –

+0

यदि आप एमएसएमक्यू का उपयोग करना चाहते हैं तो कोई विकल्प नहीं है। मुझे नहीं लगता कि इसे उपयोगकर्ता मशीन पर सक्षम करना एक मुद्दा होना चाहिए। यह खिड़कियों का हिस्सा है। –

+0

हमारे पास लगभग 15 से 20 उपयोगकर्ता हैं जिन्हें इसे सक्षम करने की आवश्यकता होगी। एमएसएमक्यू के बजाय मैं क्या उपयोग कर सकता हूं? असल में, ग्राहक एक आईडी भेज देंगे और फिर श्रोता को उस आईडी के कुछ कार्य करने की आवश्यकता होगी। इसे पहली बार पहले कतार शैली की प्रक्रिया होने की जरूरत है। –

5

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

+0

अच्छा विचार; मैं इसके साथ जा रहा हूँ। –

संबंधित मुद्दे