2012-01-18 17 views
51

Avevo creato una partizione di dominio COM +, quindi l'ho mappata a un computer server Windows 2008 e importato un'applicazione COM +.Attivazione oggetto COM + in un'altra partizione

Ho provato ad utilizzare il seguente codice C# per attivare un oggetto da tale partizione specifica sul server remoto:

//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); 

Ma ottengo questa eccezione:

Impossibile creare sink di canale per la connessione a URL 'partition: {41e90f3e-56c1-4633-81c3-6e8bac8bdd70}/new: MyObject'. Probabilmente non è stato registrato un canale appropriato.

Qualcuno sa come può essere eseguita tale attivazione?

+1

Stai cercando di attivare un nativo (in senso non NET) componente COM + o stiamo parlando di un ServicedComponent (scritto per CLR anche se pubblicato usando l'infrastruttura COM +)? – gsscoder

+0

Finché non fornisci questo dettaglio. È possibile fare riferimento a questa altra domanda: http://stackoverflow.com/questions/12637878/how-can-i-instantiate-a-com-class-interface-generically e anche a Marshal.BindToMoniker MSDN doc (http: // msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.bindtomoniker.aspx). – gsscoder

+1

CLR ServicedComponent – Solid

risposta

1
  1. Assicurati che il tuo Com sia pubblico e visibile. Per fare questo, aggiungere questi tag alla classe Com:

    [ClassInterface(ClassInterfaceType.AutoDual)] 
    [Guid("41E90F3E-56C1-4633-81C3-6E8BAC8BDD70")] 
    [ProgId("..........")] 
    [ComVisible(true)] 
    public class MyCom 
    { 
    
  2. Assicurarsi che il COM è stato registrato. È possibile farlo utilizzando la riga di comando:

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