Я написал в основном рабочий фрагмент кода, используя WCF, где клиент подписывается на сервер, а сервер передает данные клиенту.
Я ушел некоторое время и пытался наложить некоторые данные клиенту и получил исключение, которое сообщило мне, что мне нужно установить свойство receiveTimeout.
Где я могу установить это свойство? Везде, где я вижу, что эта проблема затрагивается, похоже, что код WCF был сгенерирован с использованием svcutil.exe. Я этого не делал, и я действительно не хочу начинать с нуля.
Я выяснил, как это сделать, создавая клиентскую сторону канала, вы должны явно указать время на привязку.
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");