WCF显示超时错误

时间:2010-12-11 06:14:05

标签: wcf time

我刚刚创建了一个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()

知道造成这种情况的原因是什么?

2 个答案:

答案 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>

您应该将receiveTimeoutsendtimout设置为适当的值,您可以在测试的配置文件中看到类似的配置。

答案 1 :(得分:0)

是。默认情况下,WCF服务配置的响应超时为1分钟。这意味着客户可以等待一分钟,如果他们在那段时间没有收到回复,他们可以假设失败/没有回复。

在您的情况下,您使用断点持有WCF服务以响应客户端的请求。在等待一分钟后,客户端超时并且不再等待。

您可以从WCF服务的.config文件中增加此超时。