Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DE PEROTE
INFORMÁTICA
SÉPTIMO SEMESTRE
ACTIVIDAD:
INVESTIGACIÓN COM/DCOM
DOCENTE:
CRISTIAN IGNACIO GARCÍA
BARRALES
ALUMNO:
EDGARDO RODRÍGUEZ HIPÓLITO
M = 15050054.
1
ÍNDICE:
PORTADA--------------------------------------------------- 1
ÍNDICE------------------------------------------------------- 2
INTRODUCCIÓN------------------------------------------ 3
COM/DCOM------------------------------------------------ 4
CREACIÓN DE SERVIDORES COM---------------- 7
CREACIÓN DE UN CLIENTE COM------------------ 12
AUTOMATIZACIÓN--------------------------------------- 20
ATL------------------------------------------------------------- 21
DCOM--------------------------------------------------------- 23
CONCLUSIÓN----------------------------------------------- 25
REFERENCIAS--------------------------------------------- 25
INTRODUCCIÓN.
2
Microsoft Distributed COM (DCOM) extiende COM (Component Object Model) para
soportar comunicación entre objetos en ordenadores distintos, en una LAN, WAN, o
incluso en Internet. Con DCOM una aplicación puede ser distribuida en lugares que
dan más sentido al cliente y a la aplicación.
Como DCOM es una evolución lógica de COM, se pueden utilizar los componentes
creados en aplicaciones basadas en COM, y trasladarlas a entornos distribuidos.
DCOM maneja detales muy bajos de protocolos de red, por lo que uno se puede
centrar en la realidad de los negocios: proporcionar soluciones a clientes.
El Component Object Model es una arquitectura de componentes de software que permite que las
aplicaciones y sistemas se construyan a partir de componentes producidos por distintos proveedores
de software.
Servidores COM
Los objetos “servidores” son aquellas instancias de las clases que contienen los
métodos que resuelven el problema del que se ocupa el sistema.
Cliente COM
Los objetos “clientes” son aquellas instancias de las clases que contengan la
interfaz del sistema con el usuario, que implementan los textos de ayuda del
3
sistema, los cuadros de dialogo para introducir información al sistema o bien para
mostrar resultados.
COM está diseñado para permitir que los clientes se comuniquen con otros objetos
en forma transparente independientemente del lugar donde se están ejecutando, ya
sea en el mismo proceso, la misma computadora o una computadora diferente.
COM provee acceso transparente a los servidores locales y remotos a través de
objetos proxy y stub.
} Es un contenedor binario
} Contiene el código de una o más clases de objetos
} Cada clase puede tener una o más interfaces
} COM expone o pública estas interfaces para que puedan ser usadas por otras
aplicaciones.
} Una aplicación puede usar componentes COM. independientemente del
lenguaje en que fueron escritos.
DCOM
Los servidores COM/DCOM se crean como ATL Object, que producen archivos.DLL
o .EXE, según el tipo de servidor que se requiera, mientras que los clientes se crean
como proyectos normales de aplicaciones Windows, y que hacen referencia a las
clases contenidas en la parte servidor mediante los punteros de interfaz a objetos
COM/DCOM.
4
Características principales:
Independencia de la localización
DCOM olvida completamente la localización de los componentes, ya esté en el
mismo proceso que el cliente o en una máquina en cualquier lugar del mundo. En
cualquier caso, la forma en la que el cliente se conecta a un componente y llama a
los métodos de éste es identica. No es solo que DCOM no necesite cambios en el
código fuente, sino que además no necesita que el programa sea recompilado. Una
simple reconfiguración cambia la forma en la que los componentes se conectan
entre sí.
5
DCOM proporciona esta transparencia: DCOM puede utilizar cualquier protocolo de
transporte, como TCP/IP, UDP, IPX/SPX y NetBIOS. DCOM proporciona un marco
de seguridad a todos estos protocolos.
en Internet.
DCOM es una extensión de COM, y éste define como los componentes y sus
clientes interactúan entre sí. Esta interacción es definida de tal manera que el cliente
cliente llama a los métodos del componente sin tener que preocuparse de niveles
más complejos.
6
DCOM es una evolución lógica de COM, se pueden utilizar los componentes
DCOM maneja detales muy bajos de protocolos de red, por lo que uno se puede
SERVIDOR
programa que recibe una solicitud, realiza el servicio requerido y devuelve los
1.1 Los clientes mandan peticiones a los servidores solicitando una respuesta , el
servidor escucha la petición y envía una respuesta a la petición del cliente
7
Las funciones que lleva a cabo el proceso servidor se resumen en los siguientes
Puntos
datos.
incluimos con un programa que los use), dentro de una librería de enlace dinámico
8
Tipos de Servidores COM
Anteriormente hemos visto que existen varios tipos distintos de servidores COM.
Entre ellos están los objetos COM que se “alojan” en DLLs, los que se alojan en un
ejecutable y los que se alejan en otra máquina de una red. Vamos a ver el problema
comunicación se puede realizar con el paso de parámetros normal fijado para una
DLL (incluyendo eso sí, como parámetros también, un puntero a la instancia del
objeto).
creación del objeto COM. Al entrar en ejecución el constructor del objeto, éste
hace falta que esté el ejecutable del servidor funcionando, pues el sistema es capaz
9
Cliente y servidor se encuentran en ordenadores distintos. La comunicación la
ejecutándose.
miembros se llaman de la misma forma, los objetos se crean prácticamente igual (en
parámetro que identifica al ordenador servidor). Pero, si los objetos se usan igual,
Objeto1->Funcion1 (parámetros);
El cliente no tiene constancia entonces de que tiene establecer una conexión por
red. Es el sistema operativo el que tiene que poner un proxy que “simule” que las
una función local gestionada por el sistema operativo que realice la comunicación
10
4.2. Creación de un cliente COM.
11
En los componentes COM no existe el concepto de herencia, para la reutilización se
utiliza:
COMPOSICIÓN o AGREGACIÓN.
COMPOSICIÓN
•En la composición el objeto COM simplemente actúa a su vez como cliente del
objeto COM que contiene.
AGREGACIÓN
•Se expone directamente la interfaz del objeto COM agregado, de modo que el
cliente puede acceder de forma transparente a las interfaces de los dos objetos
COM.
Implementación
Se va a construir un objeto COM capaz de almacenar la siguiente información sobre
un usuario:
Age -> short
Name -> LPSTR
Sex -> unsigned char
El objetivo es poner de manifiesto cuales son las tareas básicas de las que es
responsable todo objeto COM.
EJ: Tareas del COM
1. Crear los GUID’s necesarios para el objeto y sus interfaces
2. Definir las interfaces del objeto
3. Implementar las funciones de la interfaz definida
4. Registrar el servidor COM
12
EJ: Crear los GUID’s
•El API COM dispone del método CoCreateGuid que se encarga de esta tarea.
•Como parte de la distribución de VS se puede encontrar el programa
UUIUDGEN.exe para realizar esta tarea, aunque internamente sencillamente llama
al método del API anterior. Generamos los 3 GUID’s que vamos a necesitar:
C:>uuidgen -n3
acceeb00-86c7-11d0-94ab-0080c74c7e95 acceeb01-86c7-11d0-94ab-
0080c74c7e95 acceeb02-86c7-11d0-94ab-0080c74c7e95
13
}
•Las interfaces en IDL creadas las compilamos a través de MIDL (incluido en VS) y
se obtienen los siguientes ficheros:
•Contenido de UserInfo_i.c
const IID IID_IUserInfo = {0xacceeb02,0x86c7,0x11d0,
{0x94,0xab,0x00,0x80,0xc7,0x4c,0x7e,0x95}};
const CLSID CLSID_UserInfo = {0xacceeb01,0x86c7,0x11d0,
{0x94,0xab,0x00,0x80,0xc7,0x4c,0x7e,0x95}};
const IID LIBID_UserInfo =
{0xacceeb00,0x86c7,0x11d0,
{0x94,0xab,0x00,0x80,0xc7,0x4c,0x7e,0x95}};
• Contenido de UserInfo_i.h
Este fichero contiene las cabeceras del interfaz tanto en C como en C++
La interfaz en C++ se declara como una clase abstracta con todos sus métodos
virtuales puros, de esta manera se fuerza a quien implemente la interfaz a
implementar todos sus métodos.
class IUserInfo {
public: virtual QueryInterface(REFIID iid, LPVOID *ppv) = 0; .............}
class CUserInfo : IUserInfo { private: ULONG m_cRef; private: short m_nAge;
private: LPSTR m_lpszName; private: BYTE m_bySex;
public: STDMETHODIMP QueryInterface(REFIID iid, LPVOID *ppv); public:
STDMETHODIMP_(ULONG)AddRef(void); public:
STDMETHODIMP_(ULONG)Release(void); public: STDMETHODIMP get_Age(short
*nRetAge); public: STDMETHODIMP put_Age(short nAge); public:
STDMETHODIMP get_Name(LPSTR *lpszRetName); public: STDMETHODIMP
put_Name(LPSTR lpszname); public: STDMETHODIMP get_Sex(BYTE *byRetSex);
public: STDMETHODIMP put_Sex(BYTE bySex);
CUserInfo();
~CUserInfo(); };
14
•Implementación del método QueryInterface
STDMETHODIMP CUserInfo::QueryInterface(REFIID iid, LPVOID *ppv)
{
*ppv = NULL; if (IID_IUnknown == iid) *ppv = (LPVOID)(IUnknown *)this; else if
(IID_IUserInfo == iid) *ppv = (LPVOID)(IUserInfo *)this; else
return E_NOINTERFACE; //Interface not supported
((IUnknown *)*ppv)->AddRef(); return NOERROR;
}
•Implementación del método AddRef
STDMETHODIMP_(ULONG) CUserInfo::AddRef(void)
{ return ++m_cRef;
}
•Implementación del método Release
STDMETHODIMP_(ULONG)CUserInfo::Release(void)
{ m_cRef-; if (0 == m_cRef)
{ delete this; g_cObjects-; if (::ServerCanUnloadNow())
::UnloadServer(); return 0;
} return m_cRef;
}
15
DllRegisterServer – En esta función se escribirá la información necesaria en el
registro para que luego se pueda localizar el servidor COM.
HKEY_CLASSES_ROOT CLSID
{acceeb01-86c7-11d0-94ab0080c74c7e95} = Description
InprocServer32
C:\UserInfo\UserInfo.dll
•Los programas como Regsrv32.exe que se utilizan para registrar objetos COM
simplemente cargan la dll y
invocan el método DllRegisterServer
16
•El método CoInitialize inicializa la librería en el thread de ejecución desde el que se
invoque. Es necesario llamar a CoInitialize desde cada thread de la aplicación que
quiera acceder a objetos COM.
17
4.3. Automatización:
Es un mecanismo formal de comunicación entre procesos basado en COM.
18
Facilita:
Una infraestructura que permite que aplicaciones llamadas automation controllers
para que puedan acceder, manipular y compartir automation objects (por ejemplo,
propiedades o métodos de otras aplicaciones).
El controlador es el "cliente" y, la aplicación que exporta los objetos de
automatización, el servidor.
Los componentes COM se pueden agrupar básicamente en tres categorías.
$ In-Process
$ Locales
$ Remotos
19
Active (ATL) Template Library es un conjunto de clases de C++ basadas
en plantillas que permiten crear objetos pequeños, rápidos (COM) del
modelo de objetos componentes. Tiene compatibilidad especial para
características COM clave, incluidas las implementaciones comunes,
interfaces duales, interfaces COM estándar de enumeradores, puntos
de conexión, rasga interfaces, y controles ActiveX.
Historia
ATL versión 7 introdujo atributos en C ++ en un intento de ofrecer algo similar a los
atributos de la CLI, no han tenido mucho éxito, y se han restado importancia en la
20
versión de ATL 8 (Visual Studio 2005). La versión7 introduce nuevas clases de
conversión de cadenas.
El 28 de julio de 2009, Microsoft lanzó un parche para ATL para corregir un error
que podría permitir ActiveX controles creados con ATL a ser vulnerable a una falla
de seguridad de ejecución remota de código.
Desde Visual Studio 2013, código de ATL en Visual C ++ 2013 es estática, lo que
elimina la DLL.
Clases de apoyo
ATL incluye muchas RAII clases para simplificar la gestión de tipos COM.
Las clases más comúnmente utilizados son:
•CComPtr <T> de propósito general Smart-puntero,
•CComBSTR envoltorio BSTR,
•CComVariant envoltorio VARIANTE, y
•CComSafeArray <T> envoltorio SAFEARRAY.
Tenga en cuenta que a partir de Visual Studio 2012, las clases de apoyo compilador
COM no incluye una envoltura SAFEARRAY.
4.5. DCOM (Distributed COM).
21
varios ordenadores y que se comunican entre sí. Extiende el modelo
COM de Microsoft y proporciona el sustrato de comunicación entre la
infraestructura del servidor de aplicaciones COM+ de Microsoft. Ha sido
abandonada en favor del framework .NET.1 2
La adición de la "D" a COM fue debido al uso extensivo de DCE/RPC, o
más específicamente la versión mejorada de Microsoft, conocida como
MSRPC.
En términos de las extensiones que añade a COM, DCOM tenía que
resolver los problemas de
Aplanamiento - Serializar y deserializar los argumentos y valores
de retorno de las llamadas a los métodos "sobre el cable".
Recolección de basura distribuida, asegurándose que las
referencias mantenidas por clientes de las interfaces sean liberadas
cuando, por ejemplo, el proceso cliente ha caído o la conexión de red se
pierde.
Uno de los factores clave para resolver estos problemas es el uso de
DCE/RPC como el mecanismo RPC subyacente bajo DCOM. DCE/RPC
define reglas estrictas en cuanto al aplanamiento y a quién es
responsable de liberar la memoria.
DCOM fue uno de los mayores competidores de CORBA. Los
defensores de ambas tecnologías sostenían que algún día serían el
modelo de código y servicios sobre Internet. Sin embargo, las
dificultades que suponía conseguir que estas tecnologías funcionasen a
través de cortafuegos y sobre máquinas inseguras o desconocidas,
significó que las peticiones HTTP normales, combinadas con los
navegadores web les ganasen la partida. Microsoft, en su momento
intentó y fracasó anticiparse a esto añadiendo un transporte extra HTTP
a DCE/RPC denominado "ncacn_http" (Connection-based, over HTTP).
22
CONCLUSIÓN.
23
Com/dcom en el lenguaje c++ se utilizan para automatizar los
procedimientos, estos al automatizar los servidores nos permitieron
acceder a los objetos y la funcionalidad con la que está creado, los
servidores que están disponibles, estos objetos permiten a los
proveedores mejora las aplicaciones para poder compartirse entre sí.
El modelo com fue una herramienta creada mediante los servidores del
modelo c++ y solucionar problemas al conectarse a una red y tener
viabilidad para reestructurar por algunos fallos.
REFERENCIAS:
http://programacionambienteclienteservidor.blogspot.com/2014/11/comdcom-
component-object-model.html
Wikipedia. (12 de Marzo de 2016). wikipedia. Recuperado el 15 de Julio de 2017, de
wikipedia: https://en.wikipedia.org/wiki/Active_Template_Library
24