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





Это можно установить в узле файла ServiceReference.ClientConfig в приложении silverlight.
Это можно установить, но есть верхний предел, который определяется базовой библиотекой 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.
Значения по умолчанию и пример: msdn.microsoft.com/en-us/library/ms731361.aspx