WCF Windows服务超时

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

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

如何增加超时和如何? 什么是最好的解决scheme?

请注意,此错误消息是WCF发送的样板字符串,因为它不知道发生了什么。 这实际上意味着“我的连锁店出了问题,但我不确定是什么,所以,这是关于配置的一些琐事,做你想做的事情”。

当你得到这个消息的时候,它与实际的超时无关。 它可以是配额(图中的对象数量,总体大小,数组长度),或者在服务方法返回结果和实际字节通过线路发送的时间之间发生错误的服务器端。 所以,你应该检查你的配置设置(而不是超时,除非你必须等待一分钟才能得到错误,如果你直接得到错误,那么和超时无关)。

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

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

配置:

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

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

渣子

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

 system.transactions defaultSettings timeout="00:30:00" 

与此代码服务将等待30分钟,以完成在数据库服务器的过程,并增加

 maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" 

在客户端绑定属性,然后它工作正常。

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

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

System.ServiceModel.CommunicationException:套接字连接被中止。 这可能是由处理您的消息时出错或远程主机超出接收超时或基础网络资源问题引起的。 本地套接字超时是'00:09:59.9940000'。

System.IO.IOException:写入操作失败,请参阅内部异常。

System.ServiceModel.CommunicationException:套接字连接被中止。

这可能是由处理您的消息时出错或远程主机超出接收超时或基础网络资源问题引起的。

本地套接字超时是'00:09:59.9940000'。

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

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

为了解决这个问题,我将主机Web.Config maxReceivedMessageSize属性从2097152更改为8000000 ,错误不再持续。

这里是我指的Web.Config的属性:

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

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

检查出来,相似类型的错误你必须设置OperationTine出属性http://www.codeproject.com/KB/WCF/WCF_Operation_Timeout_.aspx

如果您知道服务器为什么要花一分多钟来响应客户端,那么您应该扩展通道的OperationTimeout(如错误消息中所述)。

看看这个,包括最后一个代码示例: http : //final-proj.blogspot.com/2009/09/wcf-timeouts.html

祝你好运。

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

NetUtilsWCF.SMTPDiagClient sClient = new NetUtilsWCF.SMTPDiagClient();

sClient.InnerChannel.OperationTimeout = new TimeSpan(0,5,0);

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

如果在更正配置文件后面临问题,则可能需要检查该属性。 "OperationContract(IsOneWay:=True)". 如果您错过了IsOneWay:=True属性,可能会导致此问题。