我有一个非常大的“旧”WCF服务,有许多不同的方法。
这些方法中的大多数是“正常的”,因此它们应该在不到10秒的时间内回答,但有几种方法(8或9)是长过程,因此它们可能需要很长时间才能得到响应。
receivetimeout和sendtimeout设置为00:40:00,以确保他们有时间完成这些过程。
问题是我们有时会遇到连接问题而且“正常”方法需要很长时间才能崩溃......
他们都在同一个服务中,因为他们使用的是一个非常大的模型,他们希望在每个调用中重用服务中的模型(没有PersonsService.User和RobotsService.User ......因为它们是相同的不同服务中的课程。)
我想到的第一个解决方案是使用那些长进程创建一个不同的服务并为正常服务设置一个短暂的超时...但是由于模型使用我应该做很多更改...
有没有办法在每次通话中设置不同的超时?还是通过服务方式?我是否应该将服务分块?
提前致谢!!
答案 0 :(得分:8)
首先,在您的情况下配置的超时是OperationTimeout
,它允许时间限制等待服务在超时之前回复。您可以在从客户端进行呼叫之前修改操作超时。
要在频道上设置OperationTimeout
,您可以将代理/频道实例设为IContextChannel
,并设置OperationTimeout
。
例如:
IClientChannel contextChannel = channel as IClientChannel;
contextChannel.OperationTimeout = TimeSpan.FromMinutes(10);
HTH, 阿米特