Ошибка тайм-аута Async Silverlight

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

Вызывается точное исключение: System.TimeoutException: [HttpRequestTimedOutWithoutDetail]

Спасибо


person NikolaiDante    schedule 01.12.2008    source источник


Ответы (5)


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

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

person NikolaiDante    schedule 01.12.2008
comment
Значения по умолчанию и пример: msdn.microsoft.com/en-us/library/ms731361 .aspx - person Nikos Tsokos; 31.05.2013

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

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

person Rick Arthur    schedule 20.03.2010

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

person Shawn Wildermuth    schedule 01.12.2008

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

person Matthew Hall    schedule 06.04.2010

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

person ashish jaiman    schedule 15.05.2009