हम अपने लाइसेंस सर्वर तक पहुंचने के लिए एक एसएपी "COM लाइसेंस ब्रिज" का उपयोग कर रहे हैं और प्रोग्राम के सिस्टम की हार्डवेयर कुंजी से पूछताछ कर रहे हैं (अपने लाइसेंसिंग के साथ पुन: उपयोग करने के लिए) । यह एसएपी बिजनेस एक संस्करण 2007 ए, 2007 बी और 8.8 पर ठीक काम करता है, लेकिन 8.81 में उन्होंने COM wrapper को अपडेट किए बिना अपने कोर्बा इंटरफ़ेस को अपडेट किया है क्योंकि अब GetHardwareKey फ़ंक्शन को कॉल करने का प्रयास करते समय हमें स्मृति अपवाद मिलते हैं।आईडीएल या देर से बाध्य आवेदक रिमोटिंग विधियों के बिना कोर्बा इंटरफ़ेस तक कैसे पहुंचे
इसलिए मैंने IIOP.NET डाउनलोड किया और अपना इंटरफ़ेस लिखने की कोशिश करना शुरू कर दिया। मुझे वैसे भी COM wrapper पसंद नहीं आया। लेकिन मुझे .NET remoting की मेरी पुरानी दासता का सामना करना पड़ा - सर्वर और क्लाइंट दोनों में एक सामान्य इंटरफ़ेस परिभाषित किए बिना रिमोट विधि का आह्वान करने में असमर्थता। मैंने आईएलएल का उपयोग IIOP.NET के साथ सीएलएस कंपाइलर में करने का प्रयास किया, लेकिन मुझे इंटरफ़ेस बीइन असंगतता के बारे में त्रुटियां मिल रही हैं (एसएपी ने आईडीएल फ़ाइल प्रदान नहीं की है)। मुझे नहीं पता कि IIOP और CORBA कैसे निर्धारित करता है कि कोई इंटरफ़ेस संगत है या नहीं। लेकिन मैंने IIOP.NET कोड में डीबग करने का प्रयास किया और असंगतता के बावजूद विधि को निष्पादित करने के लिए मजबूर किया, लेकिन मुझे इच्छित हार्डवेयर कुंजी के बजाय खाली स्ट्रिंग वापस प्राप्त हुई।
मेरे अगले कदम के एक नकली लाइसेंस सर्वर को लागू करने और क्या वे की तरह दिखना चाहिए की पहचान करने की उम्मीद में उत्पादन ग्राहक से आ रही अनुरोध की जांच करने के लिए प्रयास करने के लिए है, लेकिन मैं पर विचार ज्यादा सफलता पर भरोसा नहीं कर रहा हूँ कठिनाई मैंने पहले से ही .NET remoting के अंदरूनी भाग में peering में किया है।
मेरे वास्तविक समस्या कैसे मिलता है या SAP Business One हार्डवेयर कुंजी उत्पन्न करने, लेकिन उस से शामिल उत्पन्न सवाल है:
- मैं कैसे पर प्रतिबिंबित या एक CORBA इंटरफेस के बारे में जानकारी क्वेरी करते हैं? मैं उपलब्ध ऑब्जेक्ट्स की एक सूची पुनर्प्राप्त करने के लिए नामकरण कॉन्टेक्स्ट क्लास की सूची विधि का उपयोग कर सकता हूं, लेकिन मुझे नहीं लगता कि किसी ऑब्जेक्ट पर उपलब्ध विधियों से पूछने का कोई तरीका है या नहीं।
- क्या मैं इंटरफ़ेस के बिना गतिशील रूप से .NET रीमोटिंग विधियों का आह्वान कर सकता हूं? मुझे लगता है कि गतिशील रूप से कोर्बा का आह्वान करने के लिए डीआईआई कहा जाता है, लेकिन मुझे नहीं लगता कि इसे IIOP.NET से कैसे उपयोग किया जाए।
- क्या मैं सिर्फ एक प्रतिनिधि या अपूर्ण इंटरफ़ेस के साथ .NET रीमोटिंग विधियों का आह्वान कर सकता हूं? मैंने गतिशील कीवर्ड का उपयोग करने की कोशिश की, लेकिन यह मेरे मार्शलबीरफ रिमोट ऑब्जेक्ट पर एक विधि का आह्वान करने में असमर्थ था ... मुझे लगता है कि यह कहा गया था कि यह विधि मेरे मार्शलबीरफ उदाहरण या कुछ पर मौजूद नहीं थी। मैंने केवल IIOP.NET के माध्यम से यह कोशिश की है, हालांकि (मुझे आश्चर्य है कि यह सामान्य .NET रिमोटिंग के लिए काम करता है)।
- मैं .NET रीमोटिंग ढांचे में संदेश उदाहरण कैसे बना या निरीक्षण कर सकता हूं?
- क्या मैं अंतर्निहित प्रॉक्सी को छोड़कर सीधे प्रेषण संदेशों को भेज या पुनर्प्राप्त कर सकता हूं?
संपादित करें: मैं बनाने के लिए IIOP.NET/CORBA विश्वास है कि मैं RepositoryID विशेषता लगाने से एक संगत इंटरफ़ेस था कामयाब रहे:
[Ch.Elca.Iiop.Idl.InterfaceType(Ch.Elca.Iiop.Idl.IdlTypeInterface.ConcreteInterface)]
[Ch.Elca.Iiop.Idl.RepositoryID("IDL:LicenseInfo:1.0")]
public interface ILicenseInfo : Ch.Elca.Iiop.Idl.IIdlEntity
{
void GetHardwareKey(out string hwKey);
}
लेकिन मैं अभी भी एक खाली स्ट्रिंग परिणाम हो रही है।
संपादित करें 2: कुछ और प्रयोग और डिबगिंग के बाद, मैं ने पाया है कि प्रतिक्रिया संदेशों शायद मेरा बुरा इंटरफेस की वजह से डेटा मैं तलाश कर रहा हूँ शामिल करते हैं, लेकिन ग्राहक मूल्यों में ठीक प्रकार से पार्स नहीं किया जा रहा है, परिभाषा। उम्मीद है कि प्रतिक्रिया प्रसंस्करण में डीबगिंग करने से मुझे पता चल जाएगा कि मेरे इंटरफेस को कैसे सही किया जाए। अजीब बात यह है कि प्रतिक्रिया से पार्स करने वाली पहली चीज़ एक शून्य बॉक्स वाले मान है, जो "आउट स्ट्रिंग" पैरामीटर के लिए सही नहीं लगती है।
संपादित करें 3: मैं ने पाया है कि मैं स्ट्रिंग इस तरह मापदंडों का श्रेय उन्हें बॉक्सिंग मूल्यों के रूप में इलाज किया जा रहा से रोकने के लिए आवेदन करने की आवश्यकता:
void GetHardwareKey([StringValue(), WideChar(true)] out string hwKey);
लेकिन WideChar विशेषता के बावजूद, मैं हो रही है कोडसेट के बारे में त्रुटि WChar या कुछ का समर्थन नहीं कर रही है। मुझे यह पता लगाने के करीब वास्तव में मिल रहा है।
संपादित करें 4: मैं WChar के लिए कोडसेट सेट करने के तरीके पर फंस गया हूं। अगर मैं इसे सेट नहीं करता हूं, तो मुझे एक त्रुटि मिलती है: "WChar कोडेसेट या तो निर्दिष्ट नहीं है या समर्थित नहीं है।" क्योंकि सर्वर ने डिफ़ॉल्ट वर्ण सेट को ओवरराइड किए बिना एक यूनिकोड स्ट्रिंग वापस कर दी है। मुझे क्लाइंट से ओवरराइड करने का कोई तरीका नहीं मिल रहा है। मैंने कॉल करने की कोशिश की:
omg.org.CORBA.OrbServices.GetSingleton().OverrideDefaultCharSets(
CharSet.UTF8, WCharSet.UTF16);
लेकिन ऐसा लगता है कि क्लाइंट के अंत में कोई प्रभाव नहीं पड़ता है। उदाहरण कोड सर्वर सर्वर पर कॉलिंग दिखाता है। लेकिन मैंने सर्वर नहीं लिखा, इसलिए मैं इसे नियंत्रित नहीं कर सकता। क्या मेरा एकमात्र विकल्प IIOP.NET कोड को अपने स्वयं के उद्देश्यों के लिए एक डिफ़ॉल्ट WChar कोडसेट को प्रभावी बनाने के लिए मजबूर करने का एकमात्र विकल्प है?