.net WCF Windows服务超时

.net WCF Windows服务超时,.net,windows,wcf,web-services,exception-handling,.net,Windows,Wcf,Web Services,Exception Handling,我在.net中开发了一个客户端应用程序,它向wcf服务发送一个请求,并应该发送响应。如果执行时间在1分钟内,如果超过,则没有错误 1分钟,错误为 内部异常:此请求操作已发送到网络。tcp://localhost:18001/PitToPort/2008/01/30/StockpileService/tcp 在配置的超时(00:01:00)内未收到回复。 分配给此操作的时间可能是较长超时的一部分。这可能是因为该服务仍在处理该操作,或者因为该服务无法发送回复消息。请考虑增加操作超时(通过将通道/代理

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

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

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

超时被称为“sendTimeout”,您可以在配置文件的绑定部分或代码中配置它—由您选择

配置:

  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding sendTimeout="00:03:00" />
      </netTcpBinding>
    </bindings>

这会将超时设置为3分钟


Marc

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

system.transactions  
    defaultSettings timeout="00:30:00" 
使用此代码,服务将等待30分钟,以便在数据库服务器中完成该过程 并增加

maxBufferSize="2147483647"  
maxReceivedMessageSize="2147483647"  
maxBufferPoolSize="2147483647" 
在客户端绑定属性中,它就可以正常工作


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

请小心,此错误消息是WCF在不知道发生了什么情况时发送的样板字符串。这真的意味着“嗯,链中出现了一些错误,但我不确定是什么,所以,这里有一些关于配置的琐事,你想用它做什么就做什么”

大多数情况下,当您收到此消息时,它与实际超时无关。它可以是配额(图中对象的数量、总体大小、数组长度)或服务器端出错的内容,从服务方法返回结果到通过线路发送实际字节之间。因此,您应该检查您的配置设置(而不是超时,除非您必须实际等待一分钟才能得到错误。如果您直接得到错误,则与超时无关)


这个无用的消息在我的WCF烦恼列表中是最重要的。

如果您知道服务器响应客户端的时间超过一分钟的原因,那么您应该延长通道的操作超时时间(如错误消息中所述)

请查看以下内容,包括结尾的代码示例:


祝你好运。

这里有一个简单得多的解决方案。。。只需直接在当前ClientBase上设置属性。换句话说,首先添加一个服务引用,初始化它,然后设置属性“InnerChannel.OperationTimeout”

NetUtilsWCF.SMTPDiagClient sClient=新的NetUtilsWCF.SMTPDiagClient()


sClient.InnerChannel.OperationTimeout=新的时间跨度(0,5,0)

我也经历了同样的错误。具体而言,我收到的例外情况是:

System.ServiceModel.CommunicationException:套接字连接已断开 流产了。这可能是由于处理邮件时出错或 远程主机或基础服务器超过接收超时 网络资源问题。本地套接字超时为“00:09:59.9940000”

System.IO.IOException:写入操作失败,请参阅内部 例外

System.ServiceModel.CommunicationException:套接字连接已断开 流产了

这可能是由于处理您的邮件或接收错误造成的 远程主机或基础网络超过超时 资源问题

本地套接字超时为“00:09:59.9940000”

System.Net.Sockets.SocketException:已创建现有连接 被远程主机强制关闭

问题的原因是从WCF客户端发送到WCF主机的消息的大小。显然,消息的大小太大了

为了解决这个问题,我将hosts Web.Config
maxReceivedMessageSize
属性从
2097152
更改为
8000000
,错误不再存在

下面是我所指的Web.Config属性:

<netTcpBinding>
<binding name="NetTCPBinding" maxReceivedMessageSize="8000000">
....
</binding>
</netTcpBinding>

....

我选择的8M消息大小是基于我“认为”消息大小的大小。我不知道如何明确地确定从客户端传递到主机的实际WCF消息的大小

检查此项,对于类似类型的错误,您必须设置OperationTine out属性

如果在更正配置文件后遇到问题,则可能需要检查此属性。
“运营合同(IsOneWay:=True)”。

如果您错过了
IsOneWay:=True
属性,则可能会导致此问题。

我在使用回调时遇到相同的异常。它在本地测试中工作(客户端和服务程序在同一台机器上运行),但在用户环境中不工作(服务程序在winserver 2008中运行)。服务器代码已根据日志执行。我认为这是因为环境或权限问题,但不知道如何处理。

我们是否需要在两端写入(客户端配置和服务器配置)?我尝试了“00:30:00”,但仍然收到错误,套接字连接被中止。这可能是由于处理消息时出错、远程主机超过接收超时或基础网络资源问题造成的。本地套接字超时为“00:29:57.8030000”。但实际上不是等待30分钟,而是在1分钟内失败。您只需在客户端添加此项,除非您的服务器本身也呼叫其他服务。请检查我的答案。这可能与超时无关。这个例外信息是邪恶的、纯粹的和简单的。我说的是实际经验和1。isuue超时(wcf服务)