Ошибка Silverlight Async Timeout

Вызов моей Silverlight Enabled WCF-Service в моем приложении Silverlight, иногда пользователи получают тайм-ауты. Самый простой способ увеличить время, разрешенное клиентом службы для ответа?

Точное исключение: System.TimeoutException: [HttpRequestTimedOutWithoutDetail]

Спасибо

5 ответов

  • Доступ к соединению времени может быть открыт: Свойство BasicHttpBinding.OpenTimeout
  • Время, в течение которого соединение может оставаться неактивным, в течение которого сообщения приложения не принимаются, перед тем, как он будет удален: Свойство BasicHttpBinding.ReceiveTimout

Это можно установить в node файла ServiceReference.ClientConfig в приложении silverlight.


Принятый ответ здесь не помог мне. Вместо этого мне пришлось отбросить базовый канал в IContextChannel и установить для него OperationTimeout.

Для этого мне пришлось создать новый файл с частичным классом, который соответствовал имени ServiceReference. В моем случае у меня был PrintReportsService. Код ниже.

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;
 }
 }
}
</recipemanager.printreportsservice.printreports>

Затем, когда я создаю клиент, я делаю следующее:

PrintReportsService.PrintReportsClient client = new RecipeManager.PrintReportsService.PrintReportsClient();
 client.SetOperationTimeout(new TimeSpan(0, 4, 0));

Это сделало это для меня! Дополнительная информация доступна здесь, но фрагмент кода в этом сообщении не компилируется.


Это может быть установлено, но есть верхний предел, который определяется базовой библиотекой HTTP (я думаю, его пять минут). Обратите внимание, что использование более высокого значения вернется к верхнему пределу. Кроме того, имейте в виду, что вам также потребуется настроить таймаут на сервере.


Я исправил это, включив режим совместимости в IE


Вместо изменения таймаута, я думаю, вы должны реализовать обратный вызов на основе таймера на сервере из приложения Silverlight, чтобы срок действия сеанса не заканчивался. Это позволит устранить накладные расходы на длительные таймауты для всего вашего приложения.

licensed under cc by-sa 3.0 with attribution.