操作已超时 WCF Rest

The operation has timed out WCF Rest

我在调用我的 WCF REST 服务时收到以下异常 The operation has timed out

我基本上有一个 WCF Web 服务项目和一个引用已编译 WCF 程序集的网站。 Web 服务很有用,所以我的问题不在于我的 web.config.

中的绑定、端点或服务定义不正确

只有当我尝试插入大量数据时才会出现此问题。

web.config 包含以下信息:

<system.web>
  <compilation debug="true" targetFramework="4.0"/>
  <httpRuntime enable="true" executionTimeout="100000"
   maxRequestLength="2147483647"/>
</system.web>

<bindings>
  <webHttpBinding>
    <binding maxReceivedMessageSize="2147483647" 
             maxBufferSize="2147483647" 
             receiveTimeout="00:10:00" 
             sendTimeout="00:10:00">
      <readerQuotas maxStringContentLength="2147483647"/>
    </binding>
  </webHttpBinding>
</bindings>

项目(windows 服务)中未引用我的 WCF Web 服务,因为我使用的是包装器 (sdk),它负责发出所有相关的 http 请求并将对象转换为 json 反之亦然。所有 http 请求都是通过称为 sdk 的 WebClient 发出的。在这种情况下:

byte[] returnBuffer = await client.UploadDataTaskAsync(uriString, 
"POST", requestBuffer);

虽然这是在实时站点上发生的(哎呀!!),但我可以通过在我的 Web 服务中放置一个断点并让它挂起 90 秒左右来轻松重现该问题,然后如果我尝试继续单步执行通过,生成特定错误,当它试图继续 运行 函数中的剩余代码时,异常返回给客户端。

我已经用谷歌搜索这个问题好几个小时了,但我一无所获。我的网络服务仍然超时默认的 90 秒。

我想知道的另一件事。我一直在阅读很多不同的文章,提到客户端应用程序,在我的例子中,我的 windows 服务应该具有绑定、端点等... app.config 中的信息。我有 none,到目前为止我还不需要。我应该调查一下吗??看来超时确实发生在 Web 服务上,而不是客户端。

有什么想法吗?

谢谢。

更新:

我添加了关于我的 web.config 的附加信息(即服务和行为定义):

<services>
  <service name="MyCompany.Web.Services.WebDataService" 
                 behaviorConfiguration="WebDataServiceBehaviour">
    <endpoint address="" binding="webHttpBinding" 
              contract="MyCompany.Web.Services.IWebDataService" 
              behaviorConfiguration="webBehaviour">
    </endpoint>
  </service>
</services>

<behaviors>
  <serviceBehaviors>
    <behavior name="WebDataServiceBehaviour">
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="webBehaviour">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>

我会说这是由于客户端超时设置造成的。您有客户端配置或其他方式来配置包装器吗?

这很难说,因为我不太清楚您的包装器是如何工作的,但您可能希望增加绑定的超时时间。例如

        <binding openTimeout="00:10:00" 
             closeTimeout="00:10:00" 
             sendTimeout="00:10:00" 
             receiveTimeout="00:10:00">

here for more details

我要回答我自己的问题,因为我想澄清一些事情:

  1. 这与 web.config 中的无效设置无关,因为问题与客户端相关。很容易假设问题与服务器端相关,但在本例中并非如此。

  2. 在客户端的 app.config 中设置 ServiceModel(地址、绑定、合同)配置没有意义,因为我正在调用 WebClient 对象,到目前为止我'我知道完全不知道我正在调用的服务类型,并且这些设置非常特定于 WCF,虽然我的服务是 WCF REST Web 服务并且确实需要服务器端的 ServiceModel 设置,但 WebClient 对象完全不知道这些.

  3. 我的问题的答案在文章 How can I change the time limit for webClient.UploadData()? 中找到了。做了相关修改后,我测试了下,也部署在了live站点上,出现超时问题,上传大量数据时问题肯定解决了。

谢谢。