Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se exponen varios problemas específicos de las aplicaciones cliente de nivel intermedio que utilizan 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 utilizan ASP.NET, la creación de una instancia de cliente WCF puede ser más compleja debido al conjunto enriquecido de características de WCF. Por ejemplo, cuando se abre un objeto ChannelFactory, é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 características adicionales no tienen gran repercusión en las aplicaciones cliente ya que el cliente WCF realiza varias llamadas, y, a continuación, se cierra.
No obstante, las aplicaciones cliente de nivel intermedio pueden crear rápidamente muchos objetos 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 memoria caché el objeto cliente WCF y reutilizarlo para llamadas subsiguientes, siempre que sea posible.
Crear un objeto ChannelFactory y, a continuación, utilizarlo para crear nuevos objetos de canal 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 múltiples solicitudes de cliente intermedio porque el estado del servicio está vinculado al del este tipo de cliente.
Si el servicio realiza la autenticación basándose en cada cliente, cree un nuevo cliente para cada solicitud entrante en el nivel intermedio, en lugar de volver a utilizar 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).
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 es así independientemente del tipo de cliente WCF que reutiliza.
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, vea 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. Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) puede mejorar el rendimiento de inicio de estas aplicaciones generando el código de serialización necesario a partir de los ensamblados compilados para la aplicación. Para obtener más información, vea Cómo: Mejorar el tiempo de inicio de las aplicaciones cliente WCF mediante XmlSerializer.