Integración en la información general de las aplicaciones COM+
Windows Communication Foundation (WCF) proporciona un entorno completo para la creación de aplicaciones distribuidas. Si ya usa lógica de aplicación basada en componentes hospedada en COM+, puede usar WCF para extender la lógica existente en lugar de reescribirla. Un escenario común es cuando se quiere exponer una lógica de negocio de Enterprise Services o COM+ mediante servicios web.
Cuando una interfaz en un componente COM+ se expone como un servicio web, la especificación y contrato de estos servicios se determina por una asignación automática realizada cuando se inicia la aplicación. La lista siguiente muestra el modelo conceptual para esta asignación:
Un servicio se define para cada clase COM expuesta.
El contrato para el servicio se deriva directamente de la definición de interfaz del componente seleccionado con la posibilidad de exclusión de método definida en la configuración.
Las operaciones en ese contrato se derivan directamente de los métodos en la definición de interfaz del componente.
Los parámetros para esas operaciones se derivan directamente del tipo de interoperabilidad COM que corresponde a los parámetros de método del componente.
Las direcciones y enlaces de transporte predeterminados para el servicio son proporcionadas en un archivo de configuración de servicio, pero se pueden reconfigurar si se necesita.
Nota
Los contratos para los servicios web expuestos siguen siendo constantes siempre que las interfaces COM+ y la configuración no se modifiquen. Una modificación a varias interfaces no actualiza automáticamente los servicios disponibles y requiere que se ejecute de nuevo la herramienta COM+ Service Model Configuration (ComSvcConfig.exe).
Los requisitos de autorización y autenticación de la aplicación COM+ y sus componentes se siguen necesitando cuando se usan como un servicio web.
Si el llamador inicia una transacción del servicio web, los componentes marcados como transaccionales se inscriben dentro de ese ámbito de la transacción.
Se exige a los pasos siguientes que expongan una interfaz de componente de COM+ como un servicio web sin modificar el componente:
Determine si la interfaz de componente de COM+ se puede exponer como un servicio web.
Seleccione un modo de alojamiento adecuado.
Use la herramienta de configuración del modelo de servicio COM+ (ComSvcConfig.exe) para agregar un servicio web para la interfaz. Para obtener más información sobre el uso de ComSvcConfig.exe, consulte Procedimiento para usar la herramienta de configuración del modelo de servicio COM+.
Configure las opciones de servicio adicionales en el archivo de configuración de la aplicación. Para obtener más información sobre la configuración de un componente, consulte Procedimiento para configurar los valores de configuración del servicio COM+.
Interfaces admitidas
Hay algunas restricciones en el tipo de interfaces que se pueden exponer como un servicio web. No se admiten los siguientes tipos de interfaz:
Interfaces que pasan referencias de objeto como parámetros: el siguiente enfoque de referencia de objeto limitado se describe en la sección Compatibilidad de referencia de objeto limitado.
Interfaces que pasan tipos que no son compatibles con las conversiones de interoperabilidad de COM de .NET Framework.
Interfaces para las aplicaciones que tienen la agrupación de aplicaciones habilitadas cuando lo hospedan COM+.
Interfaces de componentes que se marcan como privado en la aplicación.
Interfaces de infraestructura COM+.
Interfaces de la aplicación de sistema.
Interfaces de los componentes de Enterprise Services no agregados a la caché global de ensamblados.
Compatibilidad limitada de referencia de objeto
Dado que varios componentes implementados de COM+ utilizan objetos por parámetros de referencia, como devolver un objeto ADO Recordset, la integración de COM+ incluye compatibilidad limitada para los parámetros de referencia de objeto. La compatibilidad se limita a los objetos que implementan la interfaz COM IPersistStream
. Esto incluye los objetos ADO Recordset y se puede implementar para objetos COM específicos de la aplicación.
Para habilitar esta compatibilidad, la herramienta ComSvcConfig.exe proporciona el modificador allowreferences, que deshabilita el parámetro de firma de método normal y comprueba que la herramienta se ejecuta para asegurar que no se usan parámetros de referencia de objeto. Además, los tipos de objeto que se pasan como parámetros se deben denominar e identificar dentro del elemento de configuración <persistableTypes>
, que es un elemento secundario del elemento <comContract>
.
Cuando se usa esta característica, el servicio de integración de COM+ utiliza la interfaz IPersistStream
para serializar o deserializar la instancia de objeto. Si la instancia de objeto no es compatible con IPersistStream
, se producirá una excepción.
Dentro de una aplicación de cliente, los métodos en el objeto PersistStreamTypeWrapper se pueden utilizar para pasar un objeto a un servicio y de igual forma recuperar un objeto.
Nota
Debido a su naturaleza personalizada y específica de la plataforma, la serialización es el enfoque más adecuado para usar entre clientes y servicios WCF.
Seleccionar el modo de hospedaje
COM+ expone servicios web en uno de los modos de hospedaje siguientes:
Hospedaje en COM
El servicio web se hospeda dentro del proceso de servidor de COM+ dedicado a la aplicación (Dllhost.exe). Este modo exige que se inicie la aplicación exactamente antes de que pueda recibir solicitudes del servicio web. Las opciones COM+ "Ejecutar como servicio NT” o "Dejar ejecutándose cuando está inactivo" se pueden utilizar para evitar el cierre por inactividad de la aplicación y sus servicios. Este modo proporciona acceso tanto al servicio web como a DCOM a la aplicación de servidor.
Hospedado por Web
El servicio web se hospeda dentro de un proceso de trabajo de servidor web. Este modo no le exige a COM+ que esté activo cuando se recibe la solicitud inicial. Si la aplicación no está activa cuando se recibe esta solicitud, se activa automáticamente antes de procesar la solicitud. Este modo también proporciona acceso a la aplicación de servidor tanto al servicio web como a DCOM, pero produce un salto del proceso para las solicitudes del servicio web. Esto exige normalmente que el cliente habilite la suplantación. En WCF se puede hacer con la propiedad AllowedImpersonationLevel de la clase WindowsClientCredential, a la que se tiene acceso como una propiedad de la clase genérica ChannelFactory<TChannel>, así como el valor de enumeración Impersonation.
Hospedaje en web en proceso
La lógica del servicio web y de la aplicación COM+ se hospedan dentro del proceso de trabajo del servidor web. Esto proporciona la activación automática del modo de hospedaje en web sin producir un salto del proceso para las solicitudes del servicio web. El inconveniente es que no se puede tener acceso a la aplicación de servidor a través de DCOM.
Consideraciones sobre la seguridad
Como otros servicios WCF, la configuración de seguridad para el servicio expuesto se administra a través de los valores de configuración del canal WCF. No se exige la configuración de seguridad de DCOM tradicional, como los valores de permisos de equipo de DCOM. Para exigir las funciones de aplicación COM+, la autorización de “comprobaciones de acceso de nivel de componente” ha de estar habilitada para el componente.
El uso de un enlace no seguro hace vulnerable la comunicación a manipulaciones o a divulgación de información. Para evitar esto, se recomienda que utilice un enlace seguro.
Para los modos de hospedaje en COM+ y web, las aplicaciones de cliente deben permitir al proceso de servidor suplantar al usuario del cliente. En clientes WCF se puede hacer al establecer el nivel de suplantación en Impersonation.
Si Internet Information Server (IIS) o el Servicio de activación de procesos de Windows (WAS) utilizan transporte HTTP, la herramienta Httpcfg.exe se puede utilizar para reservar una dirección de punto de conexión de transporte. En otras configuraciones es importante proteger contra servicios maliciosos que actúan como el servicio intencional. Para evitar que un servicio malicioso se inicie en el punto de conexión deseado, el servicio legítimo se puede configurar para que se ejecute como un servicio NT. Esto permite que el servicio legítimo exija la dirección del punto de conexión antes que cualquier servicio malicioso.
Al exponer una aplicación COM+ con roles COM+ configuradas como un servicio de hospedaje en web, se debe agregar el "Inicio de la cuenta de proceso de IIS” a uno de los roles de la aplicación. Esta cuenta, que suele tener el nombre IWAM_machinename, se debe agregar para habilitar el apagado limpio de objetos después del uso. No se le deberían otorgar permisos adicionales a esta cuenta.
Las características de reciclaje de proceso de COM+ no se pueden utilizar en aplicaciones integradas. Si la aplicación se configura para utilizar reciclaje de proceso y los componentes se ejecutan en un proceso hospedado por COM+, el servicio no se inicia. Este requisito no incluye servicios del modo en proceso de hospedaje en web porque no se aplica la configuración de reciclaje de proceso.