2011-11-04 10 views
10

का उपयोग करके प्राप्त होता है। मैं अपनी परियोजनाओं पर घटनाओं के लिए आरएक्स का उपयोग कर रहा हूं और सॉकेट प्रोग्रामिंग के लिए समर्पित हूं और इसका अच्छा हिस्सा है अच्छा कर रहा हूँ। मेरा कोड, प्रदर्शन लाभ और निष्पादन और व्याख्या करने के लिए बहुत बेहतर प्रबंधन।एमएसएमक्यू संदेश के लिए प्रतिक्रियाशील विस्तार (आरएक्स) का उपयोग एसिंक पैटर्न (queue.BeginReceive, queue.EndReceive)

हाल ही में मैं अपने प्रोजेक्ट के प्रक्रिया प्रवाह मैं कहाँ (सॉकेट संचालन से) आने वाले सभी डेटा डंप करने की जरूरत है कतार में (MSMQ कार्यान्वयन का उपयोग के रूप में कतार के लिए फैसला किया है) को संशोधित करने के लिए है।

चूंकि एमएसएमक्यू कतार से संदेशों को हटाने के लिए एसिंक कॉल प्रदान करता है (लेकिन एक व्यापक पैटर्न में)। अब मैं इस उद्देश्य के लिए आरएक्स का उपयोग करने के लिए संघर्ष कर रहा हूं, लेकिन ऐसा करने में सक्षम हूं।

प्रश्न: क्या कोई मुझे एसिंक पैटर्न का उपयोग कर कतार से प्राप्त संदेश के लिए आरएक्स को लागू करने के लिए एक स्वच्छ कोड उदाहरण दे सकता है।

मैं async ऑपरेटर की तरह इस

var data = Observable.FromAsyncPattern<byte[]>(
         this.receiverSocket.BeginReceive, 
         this.receiverSocket.EndReceive(some parameters); 

अग्रिम धन्यवाद कुछ करने के लिए MSMQ अनुरूप के लिए कार्यान्वयन की जरूरत है। * चियर्स * आरएक्स और .NET

+0

तुम मुझे वर्ग है कि मानकों के साथ 'EndReceive' को इंगित कर सकते हैं? मुझे यह नहीं मिल रहा है ... – Enigmativity

+0

मुझे यकीन नहीं है कि आप क्या पूछ रहे हैं लेकिन मैं जो समझ रहा हूं उसका जवाब दे रहा हूं। मुझे BeginReceive & EndReceive के लिए एक आरएक्स कार्यान्वयन (FromAsyncPattern) की आवश्यकता है जो मुझे "System.Messaging.Message" ऑब्जेक्ट देता है। Async विधियां System.Messaging.MessageQueue ऑब्जेक्ट विधियों के लिए हैं। आशा है कि अब आप बेहतर विचार कर रहे हैं। मैं खुश हूं और यह सुनिश्चित करता हूं कि जब आप आरएक्स प्रश्नों की बात करते हैं तो आप सुपरफास्ट का जवाब देंगे: डी – Jsinh

+0

'MessageQueue' वर्ग में' EndReceive 'विधियों में से कोई भी' IAsyncResult' के अलावा कोई पैरामीटर नहीं है। आपका 'रिसीवर सॉकेट' किस प्रकार का है? – Enigmativity

उत्तर

4

के रूप में यह रूप में सरल होगा:

var queue = new System.Messaging.MessageQueue("test"); 
var fun = Observable.FromAsyncPattern((cb, obj) => queue.BeginReceive(TimeSpan.FromMinutes(10),obj,cb), a => queue.EndReceive(a)); 
var obs = fun(); 
+0

मुझे लगता है कि आप सही हैं। एंड्रिसिव पर पूरे "पैरामीटर" ने मुझे पूरी तरह फेंक दिया! – Enigmativity

+1

हां। यह कोड पूरी तरह से काम करता है। लेकिन मुद्दा टाइमआउट के साथ है। जब समय: यहां का मामला 10 मिनट खत्म हो गया है और कतार में कोई संदेश नहीं है तो यह एक संदेश QueueException फेंकता है। दूसरी समस्या यह है कि var obs = fun(); सब्सक्राइब केवल एक बार समारोह को कॉल करेगा, मैं इसे पिछले अनुरोध के अंतराल के साथ सिंक्रनाइज़ेशन में कैसे कर सकता हूं। – Jsinh

+1

Googlers पर ध्यान दें - हालांकि उस समय एक अच्छा जवाब, 'FromAsyncPattern' अब ** अप्रचलित ** है। – MickyD

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