Моя система состоит из набора служб WCF, которые могут использоваться различными клиентами.
Первое, что я делаю, это запускаю службы в интерактивном режиме (у меня появляется консоль, и я сообщаю, что служба начал).
Затем я могу запустить данный клиент, который выполняет любые из моих служб WCF. При создании экземпляра клиент создает канал и связанные тайм-ауты следующим образом:
var ctx = new InstanceContext(TestCallbackProxy.Instance);
string baseAddress = Constants.ServiceBaseAddress;
var binding = new NetNamedPipeBinding();
binding.MaxConnections = 10;
binding.OpenTimeout = System.TimeSpan.FromMinutes(1);
binding.CloseTimeout = System.TimeSpan.FromMinutes(1);
binding.ReceiveTimeout = System.TimeSpan.FromMinutes(5);
binding.SendTimeout = System.TimeSpan.FromMinutes(5);
var channelFactory = new DuplexChannelFactory<ITestService>(ctx, binding, new EndpointAddress(baseAddress + serviceName));
// Create channel to a specified endpoint
_channel = channelFactory.CreateChannel() as ITestService;
Теперь служба в конечном итоге истекает, если некоторое время не используется, что, как я понимаю, ожидается. ie. Канал просто исчезнет / будет отброшен системой, если он не используется - я полагаю, что это связано с возможностью повторного использования и оптимизацией.
Однако, пытаясь доказать эту теорию и сократив все таймауты, я не могу заставить сервис сломаться. ie. Должен ли сервис не прерваться / прерваться при попытке использовать его, если оставить его в покое более 30 с c? Используемые таймауты:
binding.OpenTimeout = System.TimeSpan.FromMinutes(0.5);
binding.CloseTimeout = System.TimeSpan.FromMinutes(0.5);
binding.ReceiveTimeout = System.TimeSpan.FromMinutes(0.5);
binding.SendTimeout = System.TimeSpan.FromMinutes(0.5);