Ошибка Silverlight Async Timeout

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

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

Спасибо

Ответ 1

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

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

Ответ 2

Принятый ответ здесь не помог мне. Вместо этого мне пришлось отбросить базовый канал в 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;
        }


    }
}

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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