你是对的,你需要增加你的不活动超时。但是当您使用可靠会话时,receiveTimeout 也会被考虑在内。从这篇MSDN 文章:
使用可靠会话时,必须满足两个不同的不活动计时器才能使连接保持活动状态。如果这些不活动计时器中的任何一个关闭,则连接将被丢弃。
第一个不活动计时器在可靠会话上,称为 InactivityTimeout。如果在超时期限内没有收到任何消息,无论是应用程序还是基础设施,都会触发此不活动计时器。基础结构消息是为通道堆栈中的协议之一(例如保持活动或确认)而生成的消息,而不是包含应用程序数据。
第二个不活动计时器在服务上,并使用绑定的 ReceiveTimeout 设置。如果在超时期限内没有收到应用程序消息,则此不活动计时器会触发。例如,这指定了客户端在服务器关闭会话使用的通道之前向服务器发送至少一条消息所花费的最长时间。此行为可确保客户端无法在任意长时间内保留服务器资源。
由于如果任一非活动计时器触发,连接就会断开,因此一旦 InactivityTimeout 大于 ReceiveTimeout 就增加它没有任何效果。这两个超时的默认值都是 10 分钟,因此在使用可靠会话时,您始终必须同时增加这两个超时。
将这两个值都设置为“无限”(如果您使用配置文件)或者TimeSpan.MaxValue
如果您在代码中设置绑定应该可以实现您想要的。
编辑 1
将 receiveTimeout 和 inactivityTimeout 值设置为“infinite”将在编译器中生成警告。这没关系。IDE 使用不考虑该关键字的 XSL。在幕后,WCF 使用 TimeSpanOrInfiniteConverter 将关键字转换为 TimeSpan.MaxValue。 资源