调用我的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>
答案 0 :(得分:0)
我想说这是由于客户端超时设置。您是否有客户端配置或其他方式来配置包装器?
很难说,因为我不太清楚你的包装器是如何工作的,但是你想要增加绑定的超时时间。 e.g。
<binding openTimeout="00:10:00"
closeTimeout="00:10:00"
sendTimeout="00:10:00"
receiveTimeout="00:10:00">
答案 1 :(得分:0)
我要回答我自己的问题,因为我想澄清一些事情:
这与web.config中的无效设置无关,因为问题与客户端相关。很容易假设问题与服务器端有关,但在这种情况下并非如此。
在客户端的app.config中设置ServiceModel(地址,绑定,合同)配置是没有意义的,因为我正在调用WebClient对象,据我所知,它完全没有意识到我正在调用的服务类型,这些设置非常特定于WCF,虽然我的服务是WCF REST Web服务,并且在服务器端需要ServiceModel设置,但WebClient对象完全没有意识到这些。
< / LI>我的问题的答案可在文章How can I change the time limit for webClient.UploadData()?中找到。在进行相关更改后,我对此进行了彻底测试,并且它也已部署在具有超时问题的实际站点上,并且在上传大量数据时问题已得到解决。
感谢。