操作已超时WCF休息

本文关键字:休息 WCF 超时 操作 | 更新日期: 2023-09-27 17:50:54

当调用我的WCF REST服务时,我得到以下异常The operation has timed out

我基本上有一个WCF Web服务项目和一个网站,引用编译的WCF程序集。web服务工作的魅力,所以我的问题不是有一个不正确的绑定,端点或服务定义在我的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>

我的WCF web服务没有在项目(windows服务)中引用,因为我正在使用包装器(sdk),它负责制作所有相关的http请求并将对象转换为json,反之亦然。所有http请求都是通过称为sdk的WebClient发出的。在本例中:

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

当这发生在一个活动的网站上时(哎呀!!),我可以很容易地通过在我的web服务中放置一个断点并让它挂起90秒左右来重现这个问题,然后如果我试图继续逐步执行,就会生成特定的错误,当它试图继续运行函数内剩余的代码时,异常被返回给客户端。

我已经在谷歌上搜索这个问题几个小时了,但是我没有得到任何东西。我的web服务仍然超时默认90秒。

我想知道的另一件事。我读了很多不同的文章,提到客户端应用程序,在我的情况下,我的windows服务应该有绑定,端点等…app.config中的信息。我没有,也从来没有需要过。我应该调查一下吗?它确实显示超时发生在web服务而不是客户端。

任何想法?

谢谢。

更新:

我已经添加了关于我的网站的额外信息。配置(即服务&行为定义):

<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>

操作已超时WCF休息

我认为这是由于客户端超时设置。您是否有客户端配置或其他方式来配置包装器?

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

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

查看更多细节

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

  1. 这与web中的无效设置无关。配置为问题与客户端相关。很容易认为问题与服务器端有关,但在这种情况下并非如此。

  2. 在客户端app.config中设置ServiceModel(地址,绑定,合约)配置是没有意义的,因为我正在调用WebClient对象,据我所知,它完全不知道我正在调用的服务类型,这些设置非常特定于WCF,而我的服务是WCF REST web服务,确实需要在服务器端设置ServiceModel, WebClient对象完全不知道这些。

  3. 在文章中找到了我的问题的答案,我如何改变webClient.UploadData()的时间限制?在进行相关更改后,我对其进行了彻底的测试,并将其部署在有超时问题的实时站点上,并且在上传大量数据时问题已经完全解决。

谢谢。