操作已超时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>
我认为这是由于客户端超时设置。您是否有客户端配置或其他方式来配置包装器?
很难说,因为我不太清楚您的包装器是如何工作的,但是您可能希望增加绑定上的超时。例如
<binding openTimeout="00:10:00"
closeTimeout="00:10:00"
sendTimeout="00:10:00"
receiveTimeout="00:10:00">
查看更多细节
我将回答我自己的问题,因为我想澄清一些事情:
-
这与web中的无效设置无关。配置为问题与客户端相关。很容易认为问题与服务器端有关,但在这种情况下并非如此。
-
在客户端app.config中设置ServiceModel(地址,绑定,合约)配置是没有意义的,因为我正在调用WebClient对象,据我所知,它完全不知道我正在调用的服务类型,这些设置非常特定于WCF,而我的服务是WCF REST web服务,确实需要在服务器端设置ServiceModel, WebClient对象完全不知道这些。
-
在文章中找到了我的问题的答案,我如何改变webClient.UploadData()的时间限制?在进行相关更改后,我对其进行了彻底的测试,并将其部署在有超时问题的实时站点上,并且在上传大量数据时问题已经完全解决。
谢谢。