Comunicaciones DCOM

El protocolo DCOM (Modelo de Objetos Componentes Distribuidos) permite comunicación directa entre programas, anteriormente conocido como «Red OLE», un precedente a lo que hoy conoceríamos como servicios web. Con software legacy todavía encontramos este tipo de comunicación, especialmente en entornos industriales, puede ser algo complicado buscar el origen de la perdida de conexión.

Podemos utilizar DCOMTest de Microsoft en entornos Windows 2000/XP/7/10/2003 para comprobar si tenemos configurado el acceso correctamente. Este pequeño programa de prueba, registrará una clase DCOM ejecutando el archivo de registro en ambos equipos.

Iniciaremos en equipo 1 «tstSrvr.exe» que se quedará a la espera y en el equipo 2 ejecutamos «TstClnt.exe NOMBRE_EQUIPO1» que intentará realizar una conexión básica mediante DCOM:

En caso de obtener algún error, nos aseguraremos que tenemos acceso mediante el nombre del equipo, IP… comprobando la resolución de nombres (DNS, Netbios…) y revisaremos los permisos de los usuarios a las propiedades de acceso remoto/local:

NOTA: estos cambios suelen requerir reiniciar los equipos con sistemas operativos más antiguos.

Si tenemos instalado y activado algún tipo de firewall deberemos permitir el tráfico TCP 135 para la conexión inicial DCOM, después de este paso inicial se negocian los puertos de forma dinámica así que deberemos asegurarnos que se permite, por ejemplo en Windows 10 podemos crear una regla de entrada personalizada para los puertos dinámicos mediante RPC o bien fijar en el propio DCOM un rango diferente para trabajar:

Una vez solucionado el programa de prueba creará una instancia en el servidor:

Si nuestra aplicación continua con algún problema más específico podemos habilitar el registro detallado en el visor de eventos, creando las claves DWORD en:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole

Creamos: ActivationFailureLoggingLevel y CallFailureLoggingLevel ambas con valor a «1»

Arquitectura DCOM

Deja una respuesta

You have to agree to the comment policy.