miércoles, 26 de julio de 2017

PORTADA


PROGRAMACIÓN EN AMBIENTE 

CLIENTE/SERVIDOR


UNIDAD 4 -COM/DCOM


PROFESOR

  VÍCTOR MANUEL JACOBO ADÁN.


ALUMNO:
JESÚS JIMENEZ ABARCA


ING. INFORMATICA

INTRODUCCION

Existen multitud de bibliotecas de objetos. Una de las más extendidas es la de los componentes COM. De hecho, los sistemas Windows de Microsoft usan esa tecnología. Y no sólo es que la usen, sino que están basados en componentes COM. COM significa Component Object Model. COM es un modelo. Es un modelo binario, que puede ser utilizado independientemente de los lenguajes de programación que puedan soportarlo. CORBA es otro de los modelos que compite con COM.
En este documento veremos como se usan, crean y registran los componentes COM utilizando un compilador de C++ ( usando el entorno de desarrollo Borland C++ Builder ), dejando a un lado el lenguaje IDL ( para la declaración de los objetos ).
Un componente es un objeto ( como los objeto de las clases de C++) que incluye unas características mínimas, para que puedan ser utilizados tanto en un programa como en la etapa de diseño del mismo. Existen otros modelos de componentes como los modelos de Borland, OWL y VCL.  Sin embargo, sólo los componentes COM pueden utilizarse en múltiples lenguajes, de ahí que estén más extendidos. Además, las distintas partes del propio sistema operativo están realizadas con COM. Así, por ejemplo, los menús contextuales, las librerías gráficas DirectX, la creación de enlaces a ficheros, las distintas aplicaciones de Microsoft Office, etc... son objetos COM, que pueden ser utilizados desde cualquier programa.
Sin embargo, la creación de componentes es algo complicada y tediosa. Por ello se suele usar una librería de plantillas de macros que facilitan la tarea de creación de componentes.

 Historia

Cuando Microsoft estaba desarrollando sus primeros sistemas operativos Windows se encontró con un problema. Necesitaban poder insertar gráficos de una de sus aplicaciones ( Microsoft Graph ) en otra de ellas ( Microsoft PowerPoint ). En 1991 diseñaron un protocolo mediante el cual en un documento podrían insertarse objetos mantenidos por programas distintos en los que se estaba editando. El protocolo se llamaba OLE 1.0 y se basaba en el paso de mensajes y el uso de memoria global compartida. El resultado fue realmente malo, no sólo por la fragilidad del sistema ( con la caída de una de las aplicaciones caía el sistema ), además de que era muy complicada la realización de componentes para los programadores.
La siguiente versión de OLE ( llamada COM ) se rescribió desde cero por Microsoft y DEC en un principio. Al final DEC abandonó el proyecto y Microsoft continuó con él.
Las nuevas versiones que realizó Microsoft ampliaron el modelo para poder usar los componentes desde distintos ordenadores ( DCOM o Distributed COM ).

¿Por qué  y para qué COM?

COM viene incluido como parte de Windows. Es más, muchas partes de Windows son objetos COM. Si el programador quiere realizar una extensión del sistema operativo, tendrá que realizar un objeto COM. El desarrollo de un Sistema Operativo lo realizan multitud de personas. Encontrar un modelo que se adapte al desarrollo global del sistema es difícil. La programación orientada a objetos es una alternativa. COM realiza esta programación a nivel de programas binarios, en contra de lo que suele ser normal. Es decir, no hace falta tener los códigos fuentes del objeto para poder usarlo.
DCOM se puede usar en redes de una forma muy transparente, lo que nos permite la programación a varios niveles.
Podemos aprovechar las ventajas de las DLLs ( Librerías de Enlace Dinámico ) en el modelo de componentes. Entre estas ventajas están:
-          Minimizar el uso de memoria de programas ( al existir sólo una copia de las funciones en memoria )
-          Las actualizaciones de las librerías realizan mejoras sobre todos los programas que las usan ( aunque esto es un inconveniente, pues todas las nuevas versiones deben de ser compatibles 100% con las anteriores )
-          Se pueden usar y escribir funciones de/desde distintos lenguajes de programación.

4.1 CREACION DE SERVIDOR

CREACION DE SERVIDORES
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 y el componente pueden conectar sin la necesidad de un sistema intermedio. El cliente llama a los métodos del componente sin tener que preocuparse de niveles más complejos.

 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.


Es una aplicación que ofrece un servicio
a usuarios de Internet, el servidor es un programa que recibe una solicitud, realiza
el servicio requerido y devuelve los resultados en forma de una respuesta Generalmente un servidor puede tratar múltiples peticiones (múltiples clientes)al mismo tiempo.
*En esta imagen se muestra como el cliente manda la petición y el servidor manda su respuesta


Las funciones que lleva a cabo el proceso servidor se resumen en los siguientes Puntos

1- Aceptar los requerimientos de bases de datos que hacen los clientes. 
2- Procesar requerimientos de bases de datos. 
3-Formatear datos para trasmitirlos a los clientes. 
4-Procesar la lógica de la aplicación y realizar validaciones a nivel de bases de datos.

COM es un claro ejemplo de la arquitectura Cliente/Servidor. El objeto COM en sí es el servidor, y es usado por un programa que hace de cliente. Existen varias formas de realizar la comunicación. Podemos encontrar los componentes como partes de un ejecutable (como el caso de los productos de Microsoft Office, o si implementamos nuestro propio componente y lo incluimos con un programa que los use), dentro de una librería de enlace dinámico (DLL) o incluso en otra máquina (DCOM).
Tipos de Servidores
SERVIDORES EN DLL
Cliente y Servidor comparten un espacio de direcciones y un mapa de memoria. La carga del objeto COM desde el DLL se hace de forma transparente al usuario. La 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).
Es el programa cliente el que realiza la creación de memoria para comenzar la creación del objeto COM. Al entrar en ejecución el constructor del objeto, éste podría realizar peticiones de memoria dinámica.
SERVIDORES  EN EXE
Son llamados servidores locales. Se ejecutan en el mismo ordenador que el cliente, pero en procesos distintos.
SERVIDORES COM REMOTOS 
Cliente y servidor se encuentran en ordenadores distintos. La comunicación la gestiona el sistema operativo. Internamente, Microsoft usa el protocolo RPC para realizar la comunicación. Sin embargo, el programa servidor debe de estar ejecutándose. Las funciones miembros se llaman de la misma forma, los objetos se crean prácticamente igual (en servidores remotos se usa la función CoCreateInstanceEx, la cual tiene un parámetro que identifica al ordenador servidor). 

4.2 CREACION DEL CLIENTE

El cliente debe realizar las siguientes tareas:
Iniciar la librería COM
Obtener la interfaz
Manipular el objeto a través de su interfaz
Liberar las interfaces
Finalizar la librería COM
Para iniciar la librería COM hay que llamar al método del API COM CoInitialize:
            hr = CoInitialize(NULL);
            if ( SUCCEEDED(hr) )
            {
                        ...
            }
·                     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.

OBTENER LA INTERFAZ
Para obtener la interfaz inicial llamamos al método CoCreateInstance, este creará una nueva instancia de un objeto COM y nos devolverá un puntero a su interfaz.
            IUnknown *pIUnknown = NULL;
            hr = CoCreateInstance(CLSID_UserInfo, NULL,
                                   CLSCTX_INPROC_SERVER, IID_IUnknown,
                                   (LPVOID *)&pIUnknown);
            if (SUCCEEDED(hr))
            {....}

A través del puntero a IUnknow obtener el puntero a la interfaz IUserInfo
                        hr = pIUnknown->QueryInterface(IID-IUserInfo,
                                   (LPVOID *)&pIUserInfo);
                                   if (SUCCEEDED(hr))
                                               {\\manipulación del objeto}
LIBERAR LAS INTERFACES
para liberar las interfaces hay que llamar al método Release, si el objeto COM no tiene más interfaces referenciadas se borrara automaticamente:

            pIUserInfo->Release();
            pIUnknown->Release();

FINALIZAR LAS LIBRERIAS


La librería COM se finaliza a través del método CoUninitialize, una vez llamado a este método no se podrá seguir llamando a funciones de la librería COM ni manipulando objetos COM.

4.3 AUTOMATIZACION

La automatización (antes conocida como automatización OLE) permite que una aplicación manipule objetos implementados en otra aplicación o exponga objetos para que se puedan manipular.
Un  servidor de automatizacion es una aplicación (un tipo de servidor COM) que expone su funcionalidad a través de interfaces COM a otras aplicaciones, denominadas  clientes automatizacion. La exposición permite a los clientes de automatización automatizar determinadas funciones al acceder a objetos directamente y usar los servicios que proporcionan.
Los servidores y clientes de automatización usan interfaces COM que se derivan siempre de IDispatch y toman y devuelven un conjunto específico de tipos de datos denominados tipos de automatización. Puede automatizar cualquier objeto que exponga una interfaz de automatización, con lo que proporciona métodos y propiedades a los que puede acceder desde otras aplicaciones. La automatización está disponible para objetos COM y OLE. El objeto automatizado puede ser local o remoto (en otra máquina accesible a través de una red); por lo tanto, hay dos categorías de automatización:
·         Automatización (local).
·         Automatización remota (a través de una red, mediante COM distribuido, o DCOM).
La exposición de objetos es beneficiosa si las aplicaciones proporcionan funcionalidad útil para otras aplicaciones. Por ejemplo, un control ActiveX es un tipo de servidor de automatización; la aplicación que hospeda el control ActiveX es el cliente de automatización de ese control.
Como otro ejemplo, un procesador de textos podría exponer su funcionalidad de revisión ortográfica a otros programas. La exposición de objetos permite a los proveedores mejorar sus aplicaciones mediante la funcionalidad lista para usar de otras aplicaciones. De esta manera, la automatización aplica algunos de los principios de la programación orientada a objetos, como la reusabilidad y la encapsulación, en el nivel de las propias aplicaciones.
Más importante es la compatibilidad que la automatización proporciona a los usuarios y a los proveedores de soluciones. Al exponer la funcionalidad de la aplicación mediante una interfaz común bien definida, la automatización permite generar soluciones completas en un único lenguaje de programación general, como Microsoft Visual Basic, en lugar de en lenguajes distintos de macro específicos de la aplicación.
Muchas aplicaciones comerciales, como Microsoft Excel y Microsoft Visual C++, permiten automatizar gran parte de su funcionalidad. Por ejemplo, en Visual C++, puede escribir macros de VBScript para automatizar compilaciones, aspectos de edición de código o tareas de depuración.

Pasar parámetros en la automatización

Una dificultad a la hora de crear métodos de automatización es ayudar a proporcionar un mecanismo uniforme "seguro" para pasar datos entre clientes y servidores de automatización. La automatización usa el tipo VARIANT para pasar datos. El tipo VARIANT es una unión etiquetada.  

Ejemplos de automatización


  •     AUTOCLIK Use este ejemplo para aprender técnicas de automatización y como base para aprender sobre automatización remota.
  •   ACDUAL  Agrega interfaces duales a una aplicación de servidor de automatización.
  •       CALCDRIV  Aplicación de cliente de automatización que controla MFCCALC.
  •      INPROC  Ilustra una aplicación de servidor de automatización en proceso.
  • ·    IPDRIVE  Aplicación de cliente de automatización que controla INPROC.
  • ·    MFCCALC  Muestra una aplicación de cliente de automatización.




4.4 ATL(TEMPLATE LIBRARY)



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.



Si tiene muchos programación ATL, deseará obtener más información sobre atributos, una característica nueva de Visual C++ .NET que está diseñado para simplificar la programación COM.


4.5 DCOM

DCOM  es una tecnología de Microsoft que permite desarrollar componentes de software distribuidos sobre múltiples computadoras que se interactuan.
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).
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.

PORTADA

PROGRAMACIÓN EN AMBIENTE  CLIENTE/SERVIDOR UNIDAD 4 -COM/DCOM PROFESOR   VÍCTOR MANUEL JACOBO ADÁN. ALUMNO:...