当我尝试连接到不可用的计算机时,我得到一个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不知道端点在呼叫超时之前不存在。

10-05 18:12