Установка receiveTimeout для обратных вызовов в WCF?

Я написал в основном рабочий фрагмент кода с использованием WCF, где клиент подписывается на сервер, а сервер отправляет данные клиенту.

Я оставил его на некоторое время, попытался передать некоторые данные клиенту и получил исключение, в котором говорилось, что мне нужно установить свойство receiveTimeout.

Где я могу установить это свойство? Везде, где я вижу, что эта проблема решена, похоже, что код WCF был сгенерирован с помощью svcutil.exe. Я этого не делал и действительно не хочу начинать с нуля.

Ответов (1)

Решение

Я узнал, как это сделать, при создании клиентской части канала вы должны явно установить тайм-аут привязки.

NetNamedPipeBinding binding = new NetNamedPipeBinding();
binding.ReceiveTimeout = new TimeSpan(1,0,0);
binding.SendTimeout = new TimeSpan(1,0,0);
DuplexChannelFactory<IVdnServer> pipeFactory = new 
    DuplexChannelFactory<IVdnServer>(_subscriber, binding, 
        new EndpointAddress("net.pipe://localhost/PipeService"));

И когда вы создаете серверную часть конечной точки службы, вам также необходимо явно установить время ожидания.

NetNamedPipeBinding binding = new NetNamedPipeBinding();
binding.ReceiveTimeout = new TimeSpan(1,0,0);
binding.SendTimeout = new TimeSpan(1,0,0);

_host.AddServiceEndpoint(typeof(IVdnServer),binding , "PipeReverse");