Я использую WCF в общении между сервером и клиентом (оба написаны на С#).
В режиме релиза тайм-ауты должны быть установлены на ~ 20 секунд, но в режиме отладки я хочу установить для них более высокое значение, чтобы я мог отлаживать/выполнять мой код без истечения времени ожидания.
Я знаю, что могу изменить время ожидания, изменив файл app.config. Тем не менее, у меня есть две разные привязки и 4 значения времени ожидания в каждой, так что мне придется менять в нескольких местах, и это легко забыть.
Чтобы решить эту проблему, я хотел бы иметь в своем коде небольшой раздел #if DEBUG, который программно изменяет значения времени ожидания на 1 час.
Я попытался использовать следующий код для этого:
Configuration configuration =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ServiceModelSectionGroup serviceModel =
ServiceModelSectionGroup.GetSectionGroup(configuration);
BindingsSection bindings = serviceModel.Bindings;
foreach (var configuredBinding in bindings.WSHttpBinding.ConfiguredBindings)
{
configuredBinding.CloseTimeout = new TimeSpan(0, 30, 0);
configuredBinding.OpenTimeout = new TimeSpan(0, 30, 0);
но свойства * Timeout доступны только для чтения, поэтому я получаю ошибку компиляции.
Мне не нравится идея создания привязок с нуля программно. Если я изменю некоторые атрибуты в app.config, я должен не забыть сделать то же самое изменение в коде, чтобы убедиться, что поведение отладки аналогично поведению релиза (за исключением тайм-аутов..)
Как справиться с этим?