Comment puis-je spécifier une connexion uniquement délai d'attente lors de l'exécution de requêtes web?

Je suis actuellement à l'aide de code qui effectue des requêtes HTTP à l'aide de la classe HttpClient. Bien que vous pouvez spécifier un délai d'attente de la demande, la valeur s'applique à l'intégralité de la demande (qui comprend la résolution du nom d'hôte, l'établissement d'une connexion, envoi de la demande et la réception de la réponse).

J'ai besoin d'un moyen de faire des demandes échouer rapidement si elles ne peuvent pas résoudre le nom ou établir une connexion, mais j'ai aussi parfois besoin de recevoir de grandes quantités de données, qui ne peuvent donc pas seulement de réduire le délai d'attente.

Est-il un moyen pour y parvenir avec un construit en (BCL) de la classe ou un autre client HTTP pile?

J'ai regardé brièvement à RestSharp et ServiceStack, mais ni semble fournir un délai d'attente juste pour la connexion de la partie (mais corrigez-moi si je me trompe).

Je ne sais pas si vous avez regardé la suite si oui, veuillez l'ignorer.. HttpWebRequest.Timeout
Le Délai d'attente sur HttpWebRequest "s'applique à l'ensemble de la demande et de la réponse" (à partir de la page MSDN).
Est en train de changer la valeur de Délai d'expiration après la connexion a été établie une option?
Pourquoi ne pas vous venez d'effectuer (asynchrone) de la résolution DNS à l'avance, qui est le principal bugaboo? Je ne voudrais pas essayer d'établir la connectivité sur le port séparément ainsi-les régulièrement délai d'attente de prendre soin de cela, parce qu'un bon pare-feu est indiscernable d'un serveur lent-mais la résolution DNS peut seulement être pris en compte.
"si elles ne peuvent pas résoudre le nom ou établir une connexion" Il y a deux parties A) Le DNS résoudre et B) le Socket ouvert à ce port. Pas de DNS résoudre est généralement parce que 1) UN serveur DNS ou c'est d'autres voisins ne peut pas résoudre le nom ou 2) Le serveur DNS. La deuxième partie est une volonté d'envoyer un socket ouvert demande, c'est ce qu'un scanner de port, il de voir si le socket (adresse/port paire) est de répondre. Il le fait simplement en démarrant une session via un Socket.Open(). Le client répond ou ne l'est pas et le temps qu'il faut si vous avez le DNS résoudre est minime.

OriginalL'auteur Morten Mertner | 2014-11-16