我刚刚创建了一个WCF服务库。我创建了一个测试函数,并从WCF测试客户端调用了测试函数。我在代码中设置了一个断点。控制到达断点并在那里停止。现在我让控件保持在断点一段时间,并在大约一分钟内得到以下错误消息
“无法调用服务。可能的原因:服务脱机或无法访问;客户端配置与代理不匹配;现有代理无效。请参阅堆栈跟踪了解更多详细信息。您可以尝试通过启动新代理,恢复默认配置或刷新服务来恢复。“
错误详细信息: 在00:00:59.9843750之后等待回复时,请求通道超时。增加传递给Request的调用的超时值或增加Binding上的SendTimeout值。分配给此操作的时间可能是较长超时的一部分。
服务器堆栈跟踪:
在System.ServiceModel.Channels.RequestChannel.Request(消息消息,TimeSpan超时)
在System.ServiceModel.Channels.ClientReliableChannelBinder 1.RequestClientReliableChannelBinder
1.OnRequest(TRequestChannel频道,消息消息,TimeSpan超时,MaskingMode maskingMode)
在System.ServiceModel.Channels.ClientReliableChannelBinder 1.Request(Message message, TimeSpan timeout, MaskingMode maskingMode)
at System.ServiceModel.Channels.ClientReliableChannelBinder
1.Request(消息消息,TimeSpan超时)
在System.ServiceModel.Security.SecuritySessionClientSettings`1.SecurityRequestSessionChannel.Request(消息消息,TimeSpan超时)
在System.ServiceModel.Dispatcher.RequestChannelBinder.Request(消息消息,TimeSpan超时)
在System.ServiceModel.Channels.ServiceChannel.Call(String action,Boolean oneway,ProxyOperationRuntime operation,Object [] ins,Object [] outs,TimeSpan timeout)
在System.ServiceModel.Channels.ServiceChannel.Call(String action,Boolean oneway,ProxyOperationRuntime operation,Object [] ins,Object [] outs)
在System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall,ProxyOperationRuntime操作)
在System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
在[0]处重新抛出异常: 在System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg) 在System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData,Int32 type) 在ITrustmarkService.StartRobotProcess() 在TrustmarkServiceClient.StartRobotProcess()
知道造成这种情况的原因是什么?
答案 0 :(得分:2)
这是来自MSDN的示例WCF客户端配置:
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_ISampleService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Message">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
您应该将receiveTimeout
和sendtimout
设置为适当的值,您可以在测试的配置文件中看到类似的配置。
答案 1 :(得分:0)
是。默认情况下,WCF服务配置的响应超时为1分钟。这意味着客户可以等待一分钟,如果他们在那段时间没有收到回复,他们可以假设失败/没有回复。
在您的情况下,您使用断点持有WCF服务以响应客户端的请求。在等待一分钟后,客户端超时并且不再等待。
您可以从WCF服务的.config文件中增加此超时。