【发布时间】:2020-02-19 11:19:58
【问题描述】:
我的系统由一堆 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 秒时,服务是否应该不会超时/中断?使用的超时时间是:
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);
【问题讨论】:
标签: c# timeout wcf-binding