2010-11-23 4 views

Répondre

4

La réponse la plus simple est de faire une demande au service Web! Tout ce que vous faites vous dira si vous pouvez parler à un hôte particulier ou autre, mais ce n'est pas vraiment ce qui vous intéresse ... vous vous souciez de savoir si vous pouvez parler à ce service Web particulier. Le service Web en panne est équivalent à l'Internet étant en panne, en ce qui concerne votre application.

Trouvez une demande bon marché et inoffensive que vous pouvez effectuer en tant qu'appel de test, et utilisez-la. Bien sûr, juste parce que vous avez une connexion maintenant ne signifie pas que vous en aurez une en quelques minutes ... donc vous devez toujours vous assurer que votre application ne plante pas réellement lorsque la connexion disparaît. Cela devrait en fait être votre priorité IMO: la faire échouer gracieusement.

+0

Correct, correct et correct. Je me fous de l'Internet autant que je me soucie si je peux me connecter au service web, car c'est la seule chose à laquelle j'essaie d'accéder sur internet. Toutefois, afin de faire une demande au service (que je connais) est de créer le client, puis appeler l'une des fonctions asynchrones. Mais la création du client entraînera le blocage de l'application dans un thread interne car le service n'est pas disponible. – KenEucker

+0

En outre, ce n'est pas une réponse du tout car il ne répond pas à ma question, faisant seulement allusion à la façon dont je devrais aborder ma solution. Je ne sais pas comment cela a été marqué comme une réponse. – KenEucker

+0

@ Epic720: Il semble que votre client soit brisé alors. Vous devriez chercher à corriger cela au lieu d'essayer de trouver une solution de contournement qui se casse à nouveau lorsque la connexion est supprimée après la demande de test. Cependant, il est difficile de donner des conseils sans savoir de quel type de client vous parlez. Ce code est-il sous votre contrôle? Code généré automatiquement? Code tiers? Quel genre d'accident est-ce? Avez-vous une exception et une trace de pile? Avez-vous vraiment un crash sur * créer * le client, même sans faire une demande? –

1

J'ai trouvé la solution suivante

NetworkChange.NetworkAddressChanged += (sender, e) => 
{ 
    if (NetworkInterface.GetIsNetworkAvailable()) 
    { 
     // network available 
    } 
    else 
    { 
     // network is not available 
    } 
} 

proof link

+0

Ceci n'est pas spécifique à une connexion Internet. Cela réussira s'il y a une connexion à un routeur, et ce n'est pas exclusif à une connexion Internet où l'utilisation des services Web est disponible. – KenEucker

Questions connexes