ठीक है, मुझे संदेह है कि मुझे इसे शब्दों में डालने में कठिनाई हो रही है क्योंकि COM और अपार्टमेंट की मेरी समझ वास्तव में नौकरी तक नहीं है ;-)मैं अपने मुख्य-एसटीए COM सर्वर (सी ++) में कोई पुनः प्रवेश करने की अनुमति कैसे सुनिश्चित करूं?
मेरे पास एक COM इन-प्रोसेस सर्वर/घटक है (सी ++) जो कुछ विरासत कोड लपेटता है। इस विरासत कोड मैं यह सुनिश्चित करें कि COM घटक के तरीके हैं की जरूरत है की सीमाओं के कारण:
- केवल एक ही धागे पर कहा जाता है।
- यह हमेशा सर्वर के सभी उदाहरणों के लिए एक ही धागा है।
- (जिसे मैंने बाद में महसूस किया) कोई पुन: प्रवेश कॉल नहीं।
पहले दो मैंने सर्वर को थ्रेडिंगमोडेल = "" के साथ पंजीकृत करके हासिल किया।
तीसरी समस्या एक समस्या है जिसे मुझे सामना करने के लिए भी आश्चर्यचकित किया गया था।
सर्वर का उपयोग बहु-थ्रेडेड क्लाइंट द्वारा किया जा रहा है जिसका मेरा कोई नियंत्रण नहीं है। यह विभिन्न धागे पर सर्वर/घटक के कई उदाहरण बना रहा है और अपनी DoSomething() विधि को बुला रहा है।
यह फांसी और दुर्घटनाग्रस्त व्यवहार के चयन की ओर अग्रसर है और मैंने मुख्य-एसटीए थ्रेड पर दो कॉलों के साथ दो कॉल वाले स्टैक निशान देखे हैं, लेकिन सर्वर के विभिन्न उदाहरणों के लिए।
मैंने शुरू में यह भी नहीं सोचा था कि यह संभव था, लेकिन अब मुझे आंशिक समझ है और मुझे यह जानने की जरूरत है कि इसे कैसे/कैसे रोका जा सकता है।
मेरी पढ़ाई से पता चलता है कि मुझे कुछ फैशन में IMessageFilter का उपयोग करने की आवश्यकता हो सकती है, लेकिन मुझे यकीन नहीं है कि यह ऐसा कुछ है जो सर्वर के पक्ष में किया जा सकता है, या ग्राहक द्वारा किया जाना चाहिए।
क्या कोई मदद कर सकता है?
कृपया ध्यान दें मैं अगर वहाँ नहीं बल्कि जिस तरह से है कि सर्वर कोड विरासत कोड के साथ सूचना का आदान प्रदान (में विरासत कोड चलाकर जैसे बदलने के बारे में सुझाव के लिए देख रहा से COM स्तर पर कोई जवाब कर रहे हैं, यह देखने के लिए देख रहा हूँ अपने अपने थ्रेड पर सर्वर के सभी उदाहरणों से कॉल के अपने स्वयं के (गैर-COM) मार्शलिंग को अपना धागा और कार्यान्वित करना)।