我有一个很大的"旧" WCF服务,具有许多不同的方法。
这些方法中的大多数都是"正常"的,因此它们应该在不到10秒钟内回答,但是有几种方法(8或9)是很长的过程,因此它们可以花很长时间才能得到响应。
接收到的时间和sendTimeout设置为00:40:00,以确保他们有足够的时间完成这些过程。
问题有时我们有连接问题,"正常"方法需要很长时间才能崩溃...
他们都在同一服务中,因为他们使用了一个非常大的模型,并且想在每个呼叫中重复使用该服务的模型(没有PersoysService.user和robotsservice.user ...因为它们是相同的不同服务中的课程)。
我想象的第一个解决方案是通过这些漫长的过程进行不同的服务,并为正常服务设定了短暂的超时...但是由于模型使用,我应该进行很多更改...
是否有任何方法可以在每个呼叫中设置不同的超时?还是通过服务方法?我还是应该把服务切断吗?
预先感谢!
首先,在您的情况下配置的超时是 OperationTimeout
,它允许时间限制等待服务在预时之前回复。您可以在从客户端拨打电话之前修改操作超时。
要在频道上设置OperationTimeout
,您可以将case/channel实例键入为 IContextChannel
并设置OperationTimeout
。
例如:
IClientChannel contextChannel = channel as IClientChannel;
contextChannel.OperationTimeout = TimeSpan.FromMinutes(10);
hth,Amit