WCF Windows服务TimeOut

rmd*_*ssa 16 .net windows wcf web-services exception-handling

我有一个在.net中开发的客户端应用程序向wcf服务发送请求并且应该发送响应.如果执行时间在1分钟内,则没有错误,如果超过1分钟则错误是

内部异常:发送到net.tcp:// localhost:18001/PitToPort/2008/01/30/StockpileService/tcp的请求操作未在配置的超时(00:01:00)内收到回复.
分配给此操作的时间可能是较长超时的一部分.这可能是因为服务仍在处理操作,或者因为服务无法发送回复消息.请考虑增加操作超时(通过将通道/代理转换为IContextChannel并设置OperationTimeout属性)并确保该服务能够连接到客户端

如何增加时间以及如何?什么是最好的解决方案?

Yan*_*rtz 63

请注意,此错误消息是WCF发送的样板字符串,当它不知道发生了什么.这真的意味着"mmh链条出了问题,但我不确定是什么,所以,这里有一些关于配置的琐事,做你想做的事情".

大多数时候,当你收到这条消息时,它与实际的超时无关.它可以是配额(图中的对象数,总大小,数组长度)或服务器端出错的东西,在服务方法返回结果的时间和通过网络发送的实际字节之间.所以,你应该检查你的配置设置(而不是超时,除非你必须等待一分钟才能得到错误.如果你马上得到错误,它与任何超时无关).

这个无用的消息是我的WCF烦恼列表之上.


mar*_*c_s 14

超时称为"sendTimeout",您可以在配置文件的绑定部分或代码中配置它 - 您的选择.

配置:

  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding sendTimeout="00:03:00" />
      </netTcpBinding>
    </bindings>
Run Code Online (Sandbox Code Playgroud)

这会将超时设置为3分钟.

  • 检查我的答案.它可能与超时无关.此异常消息是EVIL纯粹而简单的. (4认同)
  • 我们需要在两端都写(客户端配置和服务器配置)吗? (2认同)
  • 您只需要在客户端添加它,除非您的服务器本身,然后也调用其他服务. (2认同)

rmd*_*ssa 5

我已将以下代码添加到服务应用程序代码中

system.transactions  
    defaultSettings timeout="00:30:00" 
Run Code Online (Sandbox Code Playgroud)

使用此代码,服务将等待 30 分钟以在数据库服务器中完成进程并增加

maxBufferSize="2147483647"  
maxReceivedMessageSize="2147483647"  
maxBufferPoolSize="2147483647" 
Run Code Online (Sandbox Code Playgroud)

在客户端绑定属性中,那么它就可以正常工作。

问题:服务正在发送响应,但客户端缓冲区大小之前较小,我增加到最大缓冲区大小。

  • 看起来这将允许 2GB 请求占用一个线程 30 分钟,使其成为 DDOS 的简单目标。 (2认同)