Share via


Eventos y delegados con la comunicación remota de .NET Framework

Este tema es específico de una tecnología heredada que se mantiene para la compatibilidad con versiones anteriores con aplicaciones existentes y no se recomienda para nuevo desarrollo. Las aplicaciones distribuidas se deberían desarrollar utilizando  Windows Communication Foundation (WCF).

Aunque puede utilizar eventos y delegados con la comunicación remota de .NET Framework, se deben tratar dos cuestiones principales para utilizarlos correctamente. En particular, solo debería utilizarlos en aquellas situaciones donde la autenticación se utiliza a través de IpcChannel.

Utilizar delegados

Los delegados remotos crean un problema de seguridad que se debe tratar. Si un cliente pasa un delegado a un servidor (normalmente se da cuando un cliente asocia un controlador de eventos a un evento remoto), el delegado asociado podría hacer referencia a un método no autorizado que contiene la misma firma que el método que pretendía el servicio. Puesto que la firma no intencionada y la intencionada coinciden, el servicio puede invocar el método no intencionado, aun cuando el método es estático (y por consiguiente no se puede llamar en el cliente remoto).

Para evitar esta situación, el servidor debería definir a los delegados con los tipos de parámetro personalizados y el ensamblado que contiene esos tipos debería tener un nombre seguro. Además, usted siempre debería autenticar tales comunicaciones, si no cifra. No permita nunca que un tipo se deserialice en el servidor si no está seguro que ése es el tipo que se pretendía.

Utilizar eventos

No se recomienda utilizar los eventos dados los problemas de seguridad con los delegados. En su lugar, defina un servicio de devolución de llamada de cliente que publica métodos a los que el servicio puede llamar cuando debe comunicarse con el cliente. Si decide utilizar los eventos remotos con un IpcChannel autenticado (y ha declarado los delegados tal y como se ha descrito anteriormente), debería tener los métodos de su controlador de eventos de cliente como llamadas unidireccionales. La razón es que al comprobar los eventos, el servidor invoca a los delegados de la lista de invocación de eventos. El sistema de generación de eventos se bloquea en esa invocación hasta que el cliente vuelva o se agote el tiempo. Por consiguiente, los clientes que no están realizando escuchas reducen drásticamente el rendimiento de eventos simples a menos que el controlador de eventos sea un método unidireccional.

Vea también

Conceptos

Seguridad en comunicación remota