WCF中OperationTimeout和SendTimeout之间的区别

时间:2011-03-14 19:00:06

标签: c# wcf

经过相当多的搜索,我找不到这个问题的答案。

OperationTimeoutSendTimeout之间的确切区别是什么?我看到OperationTimeoutSendTimeout的子集,SendTimeout包括在频道中写入消息。如果您提供更多详细信息,那就太棒了。

我的第二个问题是我有一个客户端调用服务,我只想在发送到服务器的请求之后不久和服务器收到回复之后设置超时。如何设置此超时?

2 个答案:

答案 0 :(得分:27)

我想建议在MSFT论坛上阅读Brian McNamara的this answer

  

绑定超时的简要概述   旋钮...

     

客户方:

     
      
  • SendTimeout用于初始化OperationTimeout,其中   管理整个互动   发送消息(包括接收   请求 - 回复中的回复消息   案件)。此超时也适用于   从a发送回复消息   CallbackContract方法。
  •   
  • 打开和关闭频道时使用OpenTimeout和CloseTimeout   (当没有明确的超时值时   传递)。
  •   
  • 未使用ReceiveTimeout。
  •   
     

服务器端:

     
      
  • 发送,打开和关闭超时与客户端(用于回拨)相同。
  •   
  • ServiceFramework层使用ReceiveTimeout进行初始化   会话空闲超时。
  •   

答案 1 :(得分:1)

我知道这是一个老问题,WCF 已经走到了尽头——不过我偶然发现了这个确切的问题。

Vincent 从 Brian McNamara 引用的答案是正确的(SendTimeout 用于初始化 OperationTimeout)。它只是不完整。

SendTimeout 还包括用于发送(写操作本身)数据的时间! See the Microsoft Docs

如果您为某些繁重的服务增加 OperationTimeout,这真的很重要。但是不要增加绑定上的 SendTimeout(对于所有服务!),大量数据必须通过糟糕的线路传输。这就是我遇到的问题...