更改每个WCF方法或调用的超时

zap*_*ico 6 wcf timeout n-tier-architecture

我有一个非常大的"旧"WCF服务,有许多不同的方法.

这些方法中的大部分都是"正常的",因此它们应该在不到10秒的时间内回答,但有几种方法(8或9)是长过程,因此它们可能需要很长时间才能得到响应.

receivetimeout和sendtimeout设置为00:40:00,以确保他们有时间完成这些过程.

问题是有时我们有连接问题而且"正常"方法需要很长时间才能崩溃...

它们都在同一个服务中,因为它们使用了一个非常大的模型,并且他们希望在每个调用中重用服务中的模型(没有PersonsService.User和RobotsService.User ......因为它们在不同的类中是相同的类服务).

我想到的第一个解决方案是使用那些长进程创建一个不同的服务并为正常服务设置一个短暂的超时...但是由于模型的使用我应该做很多改变...

有没有办法在每次通话中设置不同的超时?还是通过服务方式?我应该把服务分块吗?

提前致谢!!

ami*_*mit 9

首先,在您的情况下配置的超时是OperationTimeout,允许时间限制等待服务在超时之前回复.您可以在从客户端进行呼叫之前修改操作超时.

要设置OperationTimeout频道,您可以键入代理/频道实例作为案例IContextChannel并进行设置OperationTimeout.

例如:

IClientChannel contextChannel = channel as IClientChannel;
contextChannel.OperationTimeout = TimeSpan.FromMinutes(10);
Run Code Online (Sandbox Code Playgroud)

HTH,阿米特

  • 面对通道的并发使用,您如何以线程安全的方式做到这一点?设置 `client.InnerChannel.OperationTimeout` 然后从多个线程调用服务不起作用。但我知道 OperationTimeout 设置在操作开始时被读取一次,然后该值对于该调用保持不变,即使您更改了通道的 OperationTimeout。我只是不知道正确的位置在哪里 - 如果有的话 - 让它跨线程工作。 (3认同)