2012-01-18 13 views
51

Creé una partición de dominio COM +, luego la asigné a una máquina servidor de Windows 2008 e importé una aplicación COM + en ella.Activación de objeto COM + en una partición diferente

He intentado utilizar el siguiente código C# para activar un objeto de esa partición específica en el servidor de forma remota:

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

Pero consigo esta excepción:

No se puede crear receptores de canal para conectarse a Partición 'URL': {41e90f3e-56c1-4633-81c3-6e8bac8bdd70}/new: MyObject '. Probablemente no se haya registrado un canal apropiado.

¿Alguien sabe cómo se puede lograr dicha activación?

+1

¿Estás tratando de activar un nativo (no en el sentido .NET) componente COM + o estamos hablando de un ServicedComponent (escrito por CLR, incluso si se ha publicado usando la infraestructura COM +)? – gsscoder

+0

Hasta que proporcione este detalle. Puede consultar esta otra pregunta: http://stackoverflow.com/questions/12637878/how-can-i-instantiate-a-compliance-interface-generically y también a Marshal.BindToMoniker MSDN doc (http: // msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.bindtomoniker.aspx). – gsscoder

+1

CLR ServicedComponent – Solid

Respuesta

1
  1. Asegúrate de que tu Com sea pública y visible. Para ello, agregue estos etiquetas a su clase COM:

    [ClassInterface(ClassInterfaceType.AutoDual)] 
    [Guid("41E90F3E-56C1-4633-81C3-6E8BAC8BDD70")] 
    [ProgId("..........")] 
    [ComVisible(true)] 
    public class MyCom 
    { 
    
  2. Asegúrese de que el COM ha sido registrada. Para ello, puede utilizar la línea de comandos:

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