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

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

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

Спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
13
0
15 146
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

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

Значения по умолчанию и пример: msdn.microsoft.com/en-us/library/ms731361.aspx

Nikos Tsokos 31.05.2013 11:19

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

Вместо того, чтобы изменять тайм-аут, я думаю, вам следует реализовать обратный вызов на основе таймера на сервер из приложения 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;
        }


    }
}

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

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

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

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

Другие вопросы по теме