当我尝试连接到不可用的计算机时,我得到一个endpointnotfoundexception,但它花费了太长时间(大约20秒)。设置closeTimeout、openTimeout、receiveTimeout或sendTimeout无效。
我能早点得到那个例外吗?
最佳答案
我们使用的enterpriselibrary connectionmonitor块工作得相当好,有了它,您可以定义自己的策略来确定连接可用性,但我们只是使用框中提供的策略。
默认代码(在后台线程上运行…由块处理)在内部使用:
public bool IsAlive(string hostnameOrAddress)
{
bool alive = false;
try
{
Uri address = new Uri(hostnameOrAddress);
HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create(address);
request.Timeout = 5000;
using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())
{
alive = DoesResponseStatusCodeIndicateOnlineStatus(response);
}
}
catch (WebException wex)
{
alive = DoesWebExceptionStatusIndicateOnlineStatus(wex);
}
return alive;
}
看看块本身,看看你是否可以在你的项目中使用它,或者得到一些关于如何解决你的具体问题的想法。(内存中的块是SCSF智能客户端软件工厂的一部分)
不过,我的理解是,您需要做一些后台线程处理,或者自己等待超时。WCF不知道端点在呼叫超时之前不存在。