【问题标题】:Do the WCF timeouts on server side bindings have any relevance?服务器端绑定上的 WCF 超时是否有任何相关性?
【发布时间】:2019-10-27 22:24:34
【问题描述】:

我在 IIS 上托管 WCF 服务,并在 web.config 中有以下绑定:

    <bindings>
      <wsHttpBinding>
        <binding name="transactionalBinding" 
                 transactionFlow = "true" 
                 sendTimeout     = "00:00:01" 
                 receiveTimeout  = "00:00:01" 
                 openTimeout     = "00:00:01" 
                 closeTimeout    = "00:00:01">
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>

在我的服务方法中,我睡了 10 秒。从客户端调用我的服务方法时,我没有收到超时异常。

在服务器端绑定中定义超时有什么意义吗?

【问题讨论】:

  • 请不要编辑您的问题,以免使任何预先存在的答案无效。考虑将其作为问题发布。

标签: wcf timeout


【解决方案1】:

从客户端调用我的服务方法时,我没有收到超时异常。


TL;DR: 因为默认情况下 WCF 超时是 一分钟,所以很自然地,只需要 10 秒的服务器操作不会超时。您在服务器上指定的超时只会影响传输而不是您的方法的执行。 (你没有调用其他任何东西)


您正在 服务器 配置中指定超时。您需要做的是在客户端的配置文件中指定超时时间,特别是SendTimeout。本质上,无论哪端进行调用,都需要指定操作超时。可能与您的情况无关,但如果您的“服务器”又对另一个服务进行了另一个 WCF 调用,那么您也希望自己的超时。

MSDN:

SendTimeout – 用于初始化OperationTimeout,它控制着发送消息的整个过程,包括接收请求/回复服务操作的回复消息。当从回调合约方法发送回复消息时,此超时也适用。

通常,WCF 客户端和服务器配置应该相互匹配,除非您在每次服务器合同和/或配置更改时都使用 添加服务引用/刷新服务引用,否则客户端不会知道关于它。顺便说一句,请避免使用后者,因为它会复制您的模型,并且如果它们不同步,可能会导致运行时错误。更不用说服务合同可能会不同步。

一个短暂的想法

这带来了通过配置文件配置 WCF 的问题之一,它们会受到运行时错误的影响,在编译时无法找到。

更好的做法是完全取消配置文件,并通过客户端和服务器都使用的通用程序集进行编程配置。在代码中指定绑定以及超时。

这样,服务器和客户端在 WCF 配置方面始终保持同步。

如果客户端和服务器就超时达成一致,将会解决一些问题。

告诉我更多

【讨论】:

猜你喜欢
  • 2016-10-23
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 2011-03-22
  • 1970-01-01
相关资源
最近更新 更多