Aplicaciones cliente de nivel intermedio

En este tema se exponen varios problemas específicos de las aplicaciones cliente de nivel intermedio que usan Windows Communication Foundation (WCF).

Aumentar el rendimiento del cliente de nivel intermedio

En comparación con tecnologías de comunicación anteriores, como los servicios web que usan ASP.NET, la creación de una instancia de cliente WCF puede ser más compleja debido al conjunto enriquecido de características WCF. Por ejemplo, cuando se abre un objeto ChannelFactory<TChannel>, éste puede establecer una sesión segura con el servicio, un procedimiento que aumenta el tiempo de inicio de la instancia del cliente. Normalmente, estas funcionalidades de características adicionales no afectan en gran medida a las aplicaciones cliente, ya que el cliente WCF realiza varias llamadas y, a continuación, se cierra.

Sin embargo, las aplicaciones cliente de nivel intermedio pueden crear rápidamente varios objetos de cliente WCF y, como resultado, experimentar un incremento de los requisitos de inicialización. Existen dos enfoques principales para aumentar el rendimiento de aplicaciones de nivel intermedio durante la llamada a los servicios:

  • Almacenar en caché el objeto de cliente WCF y reutilizarlo para llamadas posteriores siempre que sea posible.

  • Cree un objeto ChannelFactory<TChannel> y, a continuación, úselo para crear nuevos objetos de canal de cliente WCF para cada llamada.

Problemas que deben tenerse en cuenta cuando se aplican estos enfoques:

  • Si el servicio mantiene un estado específico de cliente mediante una sesión, no puede reutilizarse el cliente WCF de nivel intermedio con varias solicitudes de cliente de nivel intermedio, ya que el estado del servicio está vinculado al del cliente de nivel intermedio.

  • Si el servicio realiza la autenticación basándose en cada cliente, debe crear un nuevo cliente para cada solicitud entrante en el nivel intermedio, en lugar de volver a usar el cliente WCF de nivel intermedio (u objeto de canal de cliente WCF), ya que no pueden modificarse las credenciales del cliente de nivel intermedio una vez creado el cliente WCF (o ChannelFactory<TChannel>).

  • Si bien es cierto que los canales y clientes creados por los canales son seguros para la ejecución de subprocesos, podrían no admitir la escritura de más de un mensaje en la conexión de manera simultánea. Si se envían mensajes grandes, particularmente si se transmite por secuencias, la operación enviada puede bloquearse mientras espera la finalización de otro envío. Esto provoca dos tipos de problemas: la falta de simultaneidad y la posibilidad de interbloqueo si el flujo de control vuelve al servicio que reutiliza el canal (es decir, el cliente compartido llama a un servicio cuya ruta de acceso de código da lugar a una devolución de llamada al cliente compartido). Esto se cumple independientemente del tipo de cliente WCF que reutilice.

  • Deben controlarse los canales fallidos independientemente de si se comparte o no el canal. Sin embargo, cuando se reutilizan, un canal fallido puede dejar inactiva más de una solicitud o envío pendiente.

Para obtener un ejemplo que muestra los procedimientos recomendados para reutilizar un cliente en varias solicitudes, consulte Enlace de datos en un cliente ASP.NET.

Además, puede aumentar el rendimiento de inicio de los clientes que utilizan tipos de datos que se serializan utilizando XmlSerializer para generar y compilar código de serialización de esos tipos de datos en el tiempo de ejecución, lo que puede dar lugar a un rendimiento de inicio lento. La herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) puede mejorar el rendimiento de inicio de estas aplicaciones mediante la generación de código de serialización necesario a partir de los ensamblados compilados para la aplicación. Para obtener más información, consulte Procedimiento para mejorar el startup de las aplicaciones cliente WCF mediante XmlSerializer.

Consulte también