该操作已超时WCF Rest

时间:2015-05-28 00:04:32

标签: c# web-services wcf 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>

我的WCF Web服务未在项目中引用(Windows服务),因为我正在使用包装器(sdk)来处理所有相关的http请求并将对象转换为json,反之亦然。所有的http请求都是通过名为sdk的WebClient完成的。在这种情况下:

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

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

我一直在谷歌上搜索这个问题好几个小时但是我没有随处可见。我的网络服务仍然超过默认的90秒。

我想知道另一件事。我一直在阅读很多各种文章,提到客户端应用程序,在我的情况下,我的Windows服务应该有app.config中的绑定,端点等信息。我没有,到目前为止我也从未需要过。我应该看看这个?确实看起来超时发生在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>

2 个答案:

答案 0 :(得分:0)

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

很难说,因为我不太清楚你的包装器是如何工作的,但是你想要增加绑定的超时时间。 e.g。

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

请参阅here for more details

答案 1 :(得分:0)

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

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

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

    < / LI>
  3. 我的问题的答案可在文章How can I change the time limit for webClient.UploadData()?中找到。在进行相关更改后,我对此进行了彻底测试,并且它也已部署在具有超时问题的实际站点上,并且在上传大量数据时问题已得到解决。

  4. 感谢。