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