Ошибка времени ожидания Silverlight Async - PullRequest
13 голосов
/ 01 декабря 2008

При обращении к моей WCF-службе с поддержкой Silverlight в моем приложении silverlight иногда пользователи получают тайм-ауты. Какой самый простой способ увеличить время, отведенное клиентом службы для ответа?

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

Спасибо

Ответы [ 5 ]

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

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

4 голосов
/ 20 марта 2010

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

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

1 голос
/ 06 апреля 2010

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

1 голос
/ 02 декабря 2008

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

0 голосов
/ 15 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...