我有一个在.net中开发的客户端应用程序向wcf服务发送请求并且应该发送响应。如果执行时间在1分钟内,则没有错误,如果超过 错误1分钟
内部异常:发送到net.tcp:// localhost:18001 / PitToPort / 2008/01/30 / StockpileService / tcp的请求操作未在配置的超时(00:01:00)内收到回复。登记/> 分配给此操作的时间可能是较长超时的一部分。这可能是因为服务仍在处理操作,或者因为服务无法发送回复消息。请考虑增加操作超时(通过将通道/代理转换为IContextChannel并设置OperationTimeout属性)并确保该服务能够连接到客户端
如何增加时间以及如何?什么是最好的解决方案?
答案 0 :(得分:62)
请注意,此错误消息是WCF发送的样板字符串,因为它不知道发生了什么。这真的意味着“mmh链条出了问题,但我不确定是什么,所以,这里有一些关于配置的琐事,做你想做的事情。”
当您收到此消息时,它几乎与实际超时无关。它可以是配额(图中的对象数,总大小,数组长度)或服务器端出错的东西,在服务方法返回结果和实际字节通过网络发送之间。所以,你应该检查你的配置设置(而不是超时,除非你必须等待一分钟才能得到错误。如果你马上得到错误,它与任何超时无关。)
这条无用的讯息在我的WCF烦恼列表之上。
答案 1 :(得分:14)
超时被称为“sendTimeout”,您可以在配置文件的绑定部分或代码中配置它 - 您的选择。
配置:
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding sendTimeout="00:03:00" />
</netTcpBinding>
</bindings>
这会将超时设置为3分钟。
马克
答案 2 :(得分:4)
我已将以下代码添加到服务应用代码
system.transactions
defaultSettings timeout="00:30:00"
使用此代码,服务将等待30分钟,以便在数据库服务器中完成进程 并增加
maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647"
maxBufferPoolSize="2147483647"
在客户端绑定属性中,它可以正常工作。
问题:服务正在发送响应,但客户端缓冲区大小较少,我增加到最大缓冲区大小。
答案 3 :(得分:1)
我遇到了同样的错误。具体来说,我收到的例外是:
System.ServiceModel.CommunicationException:套接字连接是 中止。这可能是由处理您的消息或错误导致的 接收远程主机或基础主机超时超时 网络资源问题。本地套接字超时为'00:09:59.9940000'。
System.IO.IOException:写操作失败,请参阅inner 异常。
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消息的大小。
答案 4 :(得分:1)
检查一下,对于类似类型的错误,你必须设置OperationTine out属性 http://www.codeproject.com/KB/WCF/WCF_Operation_Timeout_.aspx
答案 5 :(得分:0)
如果您知道服务器为什么花了一分多钟来响应客户端,那么您应该扩展通道的OperationTimeout(如错误消息中所述)。
查看此内容,包括最后的代码示例: http://final-proj.blogspot.com/2009/09/wcf-timeouts.html
祝你好运。答案 6 :(得分:0)
这是一个更简单的解决方案......只需在当前ClientBase上直接设置属性即可。换句话说,首先添加一个服务引用,初始化它,然后设置属性“InnerChannel.OperationTimeout”
NetUtilsWCF.SMTPDiagClient sClient = new NetUtilsWCF.SMTPDiagClient();
sClient.InnerChannel.OperationTimeout = new TimeSpan(0,5,0);
答案 7 :(得分:-1)
我在使用回调时遇到了同样的异常。它在本地测试中工作(客户端和服务程序在同一台机器上运行)但在用户环境中不起作用(服务程序在winserver 2008中运行)。服务器代码已根据日志执行。我认为这是因为环境或权限问题,但不知道如何处理。
答案 8 :(得分:-3)
如果在更正配置文件后遇到问题,则可能需要检查此属性。
"OperationContract(IsOneWay:=True)".
如果您错过IsOneWay:=True
属性,则可能会导致此问题。