我从代码调用服务,如果服务因任何原因停止,它会给我EndPointNotFound异常。
<binding name="NormalMode" transferMode="Buffered" receiveTimeout="24.20:31:23.6470000">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
<security mode="None" />
</binding>
我没有设置openTimeOut,因此会考虑默认的1分钟超时。
我用这种方式调用服务,
private void MyServiceCall(Action serviceCall)
{
try
{
if (serviceCall != null)
{
serviceCall();
}
}
catch (EndpointNotFoundException endpointNotFoundException)
{
throw new EndpointNotFoundException(endpointNotFoundException.Message, endpointNotFoundException);
}
我的问题是,如果服务停止,则需要1分钟才能抛出EndPointNotFoundException吗?
修改::
在这种情况下,我知道服务已停止。我通过停止服务来测试它。问题是我们已经开发了断开连接的senario,如果服务是停止的,它将返回默认数据但是需要时间,所以我调查是由openTimeOut负责它。
答案 0 :(得分:2)
客户端连接失败的原因有很多,例如:网络问题,Server App Pool停止/锁定,服务器ThreadPool耗尽等等。
这些不一定会抛出EndpointNotFoundException - 例如如果应用程序池停止,则在客户端上显示503错误ServiceTooBusyException。在这种情况下,错误将“立即”发生,并且不会“等待”服务器在服务器上“恢复”自身的配置超时持续时间。 (即openTimeout指定允许的最长时间)
你可能最好去一个基本的例外并从那里开始工作,例如
System.ServiceModel.CommunicationException
甚至只是System.Exception
。
在一个不相关的点上,请注意任意“最大化”所有WCF配置设置是不明智的 - 请参阅C# WCF - Client/Server - System.OutOfMemory Exception。
答案 1 :(得分:0)
TimeSpan值,指定为打开操作完成所提供的时间间隔。此值应大于或等于零。默认值为00:01:00。
所以我从中理解的是,已经打开的操作应该在一分钟内完成。任何意见 ??因为我正在测试它,并且只需要5秒就可以抛出EndPointNotFoundException