2012-01-18 12 views
51

मैंने COM + डोमेन विभाजन बनाया था, फिर इसे Windows 2008 सर्वर मशीन पर मैप किया और इसमें COM + अनुप्रयोग आयात किया।COM + ऑब्जेक्ट सक्रियण एक अलग विभाजन में

मैं दूर से सर्वर पर है कि विशिष्ट विभाजन से एक वस्तु को सक्रिय करने के निम्नलिखित सी # कोड का उपयोग करने की कोशिश की:

//partition guid 
Guid guidMyPartition = new Guid("41E90F3E-56C1-4633-81C3-6E8BAC8BDD70"); 
//parition moniker 
string uri= "partition:{" + guidMyPartition + "}/new:MyObject"; 
Type t = Type.GetTypeFromProgID("MyObject", "MyServer"); 
MyObject obj = (MyObject)Activator.GetObject(t, uri); 

लेकिन मैं इस अपवाद प्राप्त करें:

से कनेक्ट करने के चैनल सिंक नहीं बना सकता यूआरएल 'विभाजन: {41e90f3e-56c1-4633-81c3-6e8bac8bdd70}/नया: MyObject'। एक उपयुक्त चैनल शायद पंजीकृत नहीं किया गया है।

क्या कोई जानता है कि इस तरह की सक्रियण कैसे की जा सकती है?

+1

आप COM + घटक (भावना नहीं .NET में) एक देशी को सक्रिय करने की कोशिश कर रहे हैं या हम एक ServicedComponent (CLR के लिए लिखा की बात कर रहे हैं, भले ही प्रकाशित COM + आधारभूत संरचना का उपयोग कर)? – gsscoder

+0

जब तक आप यह विवरण नहीं देते। आप इस अन्य प्रश्न का उल्लेख कर सकते हैं: http://stackoverflow.com/questions/12637878/how-can-i-instantiate-a-com-class-interface- सामान्य रूप से और मार्शल के लिए भी। BindToMoniker MSDN दस्तावेज़ (http: // msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.bindtomoniker.aspx)। – gsscoder

+1

सीएलआर सर्विस्ड कॉम्पोनेंट – Solid

उत्तर

1
  1. सुनिश्चित करें कि आपका कॉम सार्वजनिक और दृश्यमान है। ऐसा करने के लिए, अपने कॉम वर्ग के लिए इन टैग जोड़ने:

    [ClassInterface(ClassInterfaceType.AutoDual)] 
    [Guid("41E90F3E-56C1-4633-81C3-6E8BAC8BDD70")] 
    [ProgId("..........")] 
    [ComVisible(true)] 
    public class MyCom 
    { 
    
  2. सुनिश्चित करें कि आपके कॉम पंजीकृत किया गया है। आप कमांड लाइन का उपयोग कर ऐसा कर सकते हैं:

    C:\WINDOWS\Microsoft.Net\Framework\v4.0.30319\regasm "C:\.......\xxx.dll"