WCF收到超时

时间:2010-06-28 17:32:04

标签: wcf

当尝试连接/与我的服务通信时,我必须每次等待几乎正好20秒才能触发异常。由于这一切都将在本地网络上运行,我想将超时时间减少到5秒?我尝试在我的客户端上减少receiveTimeout,但它没有用。我在我的代码中查看了20秒的超时变量集,但找不到任何。我应该改变什么?

2 个答案:

答案 0 :(得分:2)

有不同的超时设置http://msdn.microsoft.com/en-us/library/ms731078.aspx。例如,可以在配置文件(web.config或app.config)中设置它们,请参阅http://msdn.microsoft.com/en-us/library/ms731343.aspx作为示例。在http://msdn.microsoft.com/en-us/library/ms731399.aspx下,您可以选择使用的绑定并设置相应的设置。

更新:您可能在TCP级别设置了超时。尝试在注册表中减少TcpMaxConnectRetransmissions(默认值2)或TcpInitialRTT(默认值3,在NT 4.0上,参数名称为InitialRTT)参数,重新启动计算机并尝试实验再一次。关于21秒的影响,您可以在http://support.microsoft.com/kb/223450http://support.microsoft.com/kb/175523http://support.microsoft.com/kb/170359http://www.boyce.us/windows/tipcontent.asp?ID=189中阅读。您可以在http://support.microsoft.com/kb/314053(对于Windows XP)和http://technet.microsoft.com/en-us/library/cc739819(WS.10).aspx(对于Windows Server 2003 SP2)中读取TCP / IP默认配置值的说明。

答案 1 :(得分:1)

您可能实际看到的是您的网络应用程序的冷启动。 “未找到服务”异常会很快恢复,您很快就会遇到这种情况,并且您开始将服务请求排除在WCF配置之外。

但是,如果您卸载了网站(appdomain和工作进程),则可能需要20秒才能找到为您的服务构建频道的代码。所以它可能是蒙面的东西。

如果您的网站和服务位于不同的应用程序池中,那么这就是麻烦,因为它必须冷启动网站然后冷启动服务,这是连续而不是同时完成的。

为了稍微缓解这种情况,您可以使用keepalive / ping服务。只是经常点击URL以保持AppDomain在内存中并且工作进程处于活动状态(如果不共享)的东西。默认情况下,IIS 6将在20分钟不活动后关闭工作进程,因此当第一个请求进入时,http.sys启动一个新的工作进程,该进程加载框架,该框架加载您的应用程序,启动管道,执行您的代码,提供给您的用户。 :)