Question

Lorsque je tente de se connecter à une machine disponible, je reçois un EndpointNotFoundException mais il prend trop de temps (environ 20 secondes). Réglage CloseTimeout, OpenTimeout, ReceiveTimeout ou sendTimeout n'a aucun effet. Puis-je obtenir cette exception plus tôt?

Était-ce utile?

La solution

Nous utilisons le bloc EnterpriseLibrary ConnectionMonitor qui fonctionne raisonnablement bien, avec elle, vous pouvez définir votre propre stratégie pour déterminer la disponibilité de la connexion, mais nous sommes juste en utilisant celui qui vient dans la boîte.

Ce code par défaut (qui ne fonctionne sur un thread d'arrière-plan ... géré par le bloc) utilise en interne:

        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;
    }

Jetez un oeil sur le bloc lui-même, voyez si vous pouvez l'utiliser dans votre projet ou obtenir quelques idées sur la façon de résoudre votre problème. (De la mémoire du bloc fait partie de la Software Factory SCSF Smart Client)

Si je comprends bien que si vous devez faire une sorte de filet de fond ou attendre que le délai d'attente vous. WCF ne connaît pas le point final n'existe pas jusqu'à ce que les temps d'appeler.

Autres conseils

Vous pouvez toujours essayer de se connecter dans un thread séparé, et une minuterie avec votre délai souhaité sur le thread principal. Si votre thread de travail ne se termine pas dans votre délai d'attente, alors vous pouvez supposer qu'il ne répondra pas.

La solution trouvée est un mélange de villintehaspam et wallismark les réponses de. J'ai créé une méthode locale qui appelle la méthode à distance IsOk () vide et attend de manière asynchrone pendant quelques secondes. Si cela prend trop de temps j'avorte le fil.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top