2008-08-20 12 views
15

मान लीजिए मेरे पास सी # में दो एप्लिकेशन लिखे गए हैं। पहला एक तृतीय पक्ष एप्लिकेशन है जो "ऑनमेल मेल" नामक एक ईवेंट उठाता है।किसी अन्य एप्लिकेशन में ईवेंट के लिए सुनें

दूसरा यह है कि मैं लिखा है कि मैं किसी भी तरह पहले आवेदन की भी "OnEmailSent" की सदस्यता के लिए चाहते हैं एक कस्टम अनुप्रयोग है।

वहाँ किसी भी तरह से है कि मैं किसी भी तरह पहले आवेदन करने के लिए "OnEmailSent" घटना के लिए सुनने का एक उदाहरण के लिए दूसरा आवेदन देते हैं सकता है?


तो आगे स्पष्टीकरण के लिए, मेरे विशिष्ट परिदृश्य है कि हम एक कस्टम तीसरे पक्ष के आवेदन सी ​​# कि एक "OnEmailSent" घटना उठाती में लिखा है। हम घटना को परावर्तक का उपयोग कर मौजूद देख सकते हैं।

क्या हम क्या करना चाहते हैं कुछ अन्य गतिविधियाँ जगह ले इस घटक एक ईमेल भेजता है जब है।

सबसे प्रभावी तरीका हम सोच सकते हैं कि हम आईपीसी के कुछ रूपों का उपयोग करने में सक्षम होंगे क्योंकि एंडर्स ने तीसरे पक्ष के घटक द्वारा उठाए गए OnEmailSent ईवेंट को सुझाव दिया है और सुन लिया है।

क्योंकि घटक सी # में लिखा गया है, हम एक और सी # अनुप्रयोग लिखने के विचार से टकरा रहे हैं जो स्वयं को निष्पादन प्रक्रिया में संलग्न कर सकता है और जब यह ऑनईमेलसेन्ट ईवेंट का पता लगाया गया है तो यह अपने स्वयं के ईवेंट हैंडलिंग कोड को निष्पादित करेगा।


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

मैं ऐसे परिदृश्य के बारे में और सोच रहा था जहां किसी ने उदाहरण के लिए दृष्टिकोण जैसे स्टैंडअलोन एप्लिकेशन लिखा है, जो उन घटनाओं को उजागर करता है जिन्हें मैं किसी अन्य एप्लिकेशन से सब्सक्राइब करना चाहता हूं।

मुझे लगता है कि परिदृश्य मैं सोच रहा हूँ .net डिबगर और कैसे यह विधानसभाओं को क्रियान्वित करने, जबकि यह चल रहा है कोड का निरीक्षण करने के लिए संलग्न कर सकते हैं है।

उत्तर

11

घटनाओं का आदान-प्रदान करने के लिए दो अनुप्रयोगों (अलग प्रक्रियाओं) के लिए, उन्हें इस बात पर सहमत होना चाहिए कि इन घटनाओं को कैसे सूचित किया जाता है। ऐसा करने के कई अलग-अलग तरीके हैं, और उपयोग करने के लिए वास्तव में कौन सी विधि वास्तुकला और संदर्भ पर निर्भर हो सकती है। प्रक्रियाओं के बीच इस तरह के सूचना विनिमय के लिए सामान्य शब्द Inter-process Communication (IPC) है। आईपीसी करने के कई मानक तरीके मौजूद हैं, सबसे आम फाइलें, पाइप, (नेटवर्क) सॉकेट, remote procedure calls (RPC) और साझा स्मृति। विंडोज़ पर window messages का उपयोग करना भी आम है।

मुझे यकीन नहीं है कि यह विंडोज पर .NET/C# अनुप्रयोगों के लिए कैसे काम करता है, लेकिन मूल Win32 अनुप्रयोगों में आप hook on to the message loop of external processes and "spy" on the messages they are sending कर सकते हैं। यदि आपका प्रोग्राम वांछित फ़ंक्शन कहलाता है तो संदेश प्रोग्राम उत्पन्न करता है, तो यह इसका पता लगाने का एक तरीका हो सकता है।

यदि आप दोनों अनुप्रयोगों को स्वयं लागू कर रहे हैं तो आप अपनी पसंदीदा आईपीसी विधि का उपयोग करना चुन सकते हैं। नेटवर्क सॉकेट और उच्च स्तरीय सॉकेट-आधारित प्रोटोकॉल जैसे HTTP, XML-RPC और SOAP इन दिनों बहुत लोकप्रिय हैं, क्योंकि वे आपको विभिन्न भौतिक मशीनों पर भी एप्लिकेशन चलाने की अनुमति देते हैं (यह देखते हुए कि वे किसी नेटवर्क के माध्यम से जुड़े हुए हैं)।

2

आप Managed Spy कोशिश करते हैं और प्रोग्रामेटिक एक्सेस के लिए कर सकते हैं ManagedSpyLib

ManagedSpyLib एक वर्ग ControlProxy कहा जाता है प्रस्तुत करता है। एक ControlProxy एक और इस प्रक्रिया में एक System.Windows.Forms.Control का प्रतिनिधित्व है। ControlProxy आप प्राप्त या सेट गुण और ईवेंट की सदस्यता के रूप में यदि आप गंतव्य प्रक्रिया के अंदर चल रहे थे करने के लिए अनुमति देता है। स्वचालन परीक्षण, संगतता, क्रॉस प्रक्रिया संचार, या व्हाइटबॉक्स परीक्षण के लिए ईवेंट लॉगिंग के लिए ManagedSpyLib का उपयोग करें।

लेकिन यह आपके लिए काम नहीं कर सकता है, यह निर्भर करता है कि क्या नियंत्रणप्रोक्सी किसी भी तरह से आपके तीसरे पक्ष के आवेदन के बाद होने वाली घटना तक पहुंच सकता है या नहीं।

तुम भी इस्तेमाल कर सकते हैं Reflexil

Reflexil जेबी EVAIN द्वारा लिखित शक्तिशाली Mono.Cecil लाइब्रेरी का उपयोग करके आईएल संशोधनों अनुमति देता है। रिफ्लेक्सिल रिफ्लेक्टर प्लग-इन के रूप में चलता है और विशेष रूप से आईएल कोड हैंडलिंग की दिशा में निर्देशित किया जाता है। यह द्वारा पूर्ण निर्देश संपादक का प्रस्ताव और सी #/वीबी.NET कोड इंजेक्शन की अनुमति देकर इसे पूरा करता है।

0

उस तीसरे पक्ष के आवेदन से उस OnEmailSent ईवेंट की प्रकृति क्या है? मेरा मतलब है, आप कैसे जानते हैं कि एप्लिकेशन ऐसी घटना को ट्रिगर कर रहा है?

यदि इंटरप्रोसेस संचार करने की योजना बना रहे हैं, तो पहला सवाल आपको खुद से पूछना चाहिए: क्या यह वास्तव में आवश्यक है?

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

यह सवाल लाता है, आप वास्तव में क्या करने की कोशिश कर रहे हैं? इस तीसरे पक्ष के आवेदन पर आपका कोई नियंत्रण नहीं है?

इसके अलावा, डीबगर के पास डीबगिंग प्रक्रियाओं का एक बहुत ही आक्रामक तरीका है। अन्य सभी अनुप्रयोगों द्वारा उपयोग की जाने वाली मानक इंटरप्रोसेस तंत्र होने की अपेक्षा न करें। वास्तव में, यह नहीं है।

0

आप SQL सर्वर 2005 क्वेरी परिवर्तन अधिसूचनाओं के साथ एक समान परिदृश्य को कार्यान्वित कर सकते हैं जो एक सतत SqlConnection को एक .NET अनुप्रयोग के साथ बनाए रखता है जो डेटाबेस में डेटा परिवर्तनों तक ब्लॉक करता है।

http://www.code-magazine.com/article.aspx?quickid=0605061 देखें।

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