Error de tiempo de espera Async de Silverlight
using async in wcf (5)
Esto se puede establecer, pero hay un límite superior definido por la biblioteca HTTP subyacente (creo que son cinco minutos). Tenga en cuenta que usar un valor más alto caerá a lo que es el límite superior. Además, tenga en cuenta que también puede necesitar configurar el tiempo de espera en el servidor.
Llamando a mi servicio Silverlight Enabled WCF en mi aplicación Silverlight, ocasionalmente los usuarios obtienen tiempos de espera excedidos. ¿Cuál es la forma más fácil de aumentar el tiempo permitido por el cliente de servicio para una respuesta?
La excepción exacta lanzada es: System.TimeoutException: [HttpRequestTimedOutWithoutDetail]
Gracias
- Se puede abrir una cantidad de tiempo de conexión: propiedad BasicHttpBinding.OpenTimeout
- Tiempo que una conexión puede permanecer inactiva, durante la cual no se reciben mensajes de la aplicación, antes de que se caiga: propiedad BasicHttpBinding.ReceiveTimout
Esto puede establecerse en el nodo del archivo ServiceReference.ClientConfig en la aplicación silverlight.
La respuesta aceptada aquí no funcionó para mí. En cambio, tuve que convertir el canal base en un IContextChannel, y establecer el OperationTimeout en eso.
Para hacer eso, tuve que crear un nuevo archivo con una clase parcial, que coincidía con el nombre de ServiceReference. En mi caso, tenía un PrintReportsService. El código está abajo.
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace RecipeManager.PrintReportsService
{
public partial class PrintReportsClient : System.ServiceModel.ClientBase<RecipeManager.PrintReportsService.PrintReports>, RecipeManager.PrintReportsService.PrintReports
{
public void SetOperationTimeout(TimeSpan timeout)
{
((System.ServiceModel.IContextChannel)base.Channel).OperationTimeout = timeout;
}
}
}
Luego, cuando creo el cliente, hago lo siguiente:
PrintReportsService.PrintReportsClient client = new RecipeManager.PrintReportsService.PrintReportsClient();
client.SetOperationTimeout(new TimeSpan(0, 4, 0));
¡Eso lo hizo por mí! Hay más información disponible aquí , pero el fragmento de código en esta publicación no se compila.
Lo solucioné habilitando el modo de compatibilidad en IE
En lugar de cambiar el tiempo de espera, creo que debe implementar una devolución de llamada basada en temporizador al servidor desde la aplicación Silverlight para que la sesión no caduque. Esto eliminaría la sobrecarga de tiempos de espera más largos para toda su aplicación.