Le readwreeTimeTimeout pour httpwebrequest semble être perfectionné à 5 minutes. P>
Y a-t-il une raison pour laquelle c'est si élevé? J'essayais de définir le délai d'attente d'un appel API à 10 secondes, mais c'était tourné pendant plus de 2 minutes. P>
Lorsque je réglais ceci à 30 secondes, il est temps de sortir dans une durée raisonnable maintenant. P>
est-il dangereux de définir cela trop bas? p>
Je ne peux pas imaginer quelque chose qui prend plus de 20-30 secondes dans mon application (petite charge utile de 2-30kb). P>
Référence: http://msdn.microsoft.com/en-us /Library/system.net.httpwebrequest.ReadwreeTimeTeT.aspx p>
4 Réponses :
Vous ne pouvez pas éventuellement savoir quelle connexion de la connexion aux utilisateurs qui se connectent à votre site Web. Et comme le créateur de ce cadre, vous ne pouvez pas savoir non plus ce que le développeur accueillera. Cette classe existait déjà dans .NET 1.1, donc pendant très longtemps. Et retour alors les utilisateurs ont également une vitesse plus lente. P>
Trouver une bonne valeur par défaut est très difficile. Vous ne voulez pas la mettre trop élevé pour éviter les défauts de sécurité et vous ne voulez pas la définir trop bas car cela entraînerait un million de threads (exagéré) et des demandes de demandes avortées. P>
Je suis désolé de ne pas pouvoir vous donner des sources officielles, mais cela n'est que raisonnable. P>
La vitesse de connexion est régie par un délai différent, défini dans la pile TCP / IP et contrôlé via des clés de registre. Typiquement environ 45 secondes. Vous verrez utilisé lorsque vous essayez de visiter un site Web mort avec votre navigateur. Ou popez votre câble réseau. Le délai d'attente que l'OP s'inquiète de cela est sur le dessus et couvre le délai maximum autorisé dans une demande de fichier après i> la connexion est établie.
pourquoi 5 minutes? Pourquoi pas? JustanotherReuseryoumayknow l'a expliqué à très bien. Mais comme d'habitude, vous avez la liberté de modifier cette valeur par défaut à une valeur qui convient à votre cas même, alors n'hésitez pas à suivre le chemin qui Christian a souligné. P>
Définition d'une valeur par défaut n'est pas une tâche facile du tout lorsque nous parlons de millions d'utilisateurs et peut-être des millions de milliards de scénarios possibles impliqués. P>
La ligne de bootom est que ce n'est pas si important pourquoi il est 5 minutes, mais plutôt comment vous pouvez l'ajuster à vos besoins mêmes. P>
Bien sûr, il y a une raison pour une période de 5 minutes. Cela ressemble à ceci: p>
p>
Ce contrat est un système de récupération de bande robotique, utilisé par le Centre international pour la recherche en radio-astronomie. Il stocke 32,5 pétaoctes de données historiques. Lorsque son serveur reçoit un httpwebrequest, la machine envoie le robot sur sa manière de récupérer la bande avec les données. Cela prend un certain temps, comme vous pourriez imaginer. P>
Ces systèmes étaient assez courants il y a une décennie, autour du temps .NET a été conçu. Pas tant aujourd'hui, les améliorations implacables de la capacité de stockage du disque dur leur ont été proches de l'obsolète. Bien que plus de 5 pétaabytes de SAN STOCKAGE vous établissent toujours une partie d'argent plutôt majeure. Si la vitesse n'est pas essentielle, la bande est difficile à battre. P>
Clairement .net ne peut pas éventuellement déclarer de manière fiable un délai d'attente quand il ne sait rien de ce qui se passe sur l'autre extrémité du fil. Donc, la valeur par défaut est élevée. Si vous avez de bonnes raisons de croire qu'il y a une limite supérieure de votre configuration particulière, n'hésitez pas à la baisser. Faites-en un cadre modifiable, vous ne pouvez pas prédire l'avenir. P>
Cela n'aurait-il pas été meilleur, si le client a envoyé une demande, le serveur a répondu "Voyons-vous ... Je pense que je vais avoir besoin de 5 minutes" i> puis de définir le délai d'attente en conséquence? Je veux dire, cela aurait non seulement été très dynamique, mais aurait également empêché les gens de devoir attendre 5 minutes pour un site qui n'aura jamais reçu la demande en premier lieu. Je ne vous interroge pas, BTW, vous vous demandez simplement (peut-être que ce que j'ai suggéré n'aurait pas été possible)
Sûr. Mais HTTP et FTP ne supportent pas cela, ce sont des protocoles très simples.
Eh bien, http n'est pas aussi simple que FTP. IIRC, il supporte que les conserves de conserve qui pourraient être utilisées pour maintenir la connexion vivante dans un cas comme celle de l'un des HANS décrit lorsque le backend doit gérer des données d'un système de stockage robotique de bande ou d'effectuer une autre opération de haute latence.
HANS, le retard de ce robot n'aurait-il pas besoin d'un important délai d'attente code> plus qu'il n'a besoin d'un grand ReadwreeTimeTout code>? Je cherche le code qui définit les deux coups de temps sur la même valeur importante et je me demande dans quelles circonstances pourraient avoir un sens pour
readwreetimeout code> plus petit que
Timeout code>?
Eh bien, en la fixant que vous êtes bas que vous pouvez ou peut introduire une série de problèmes. Comme vous pourrez peut-être rejoindre le site dans un délai raisonnable, d'autres peuvent non plus. p>
Un exemple parfait est Verizon, ils invoquent une série de serveurs proxy code> qui peuvent ralentir considérablement une connexion. La raison pour laquelle j'ai apporté un tel exemple en hausse; Notre application a-t-elle spécifié un délai d'expiration d'une minute code> avant de lancer une exception. P>
Notre serveur n'a aucun problème avec de grandes quantités de demande, il les gère assez facilement. Cependant, certains de nos utilisateurs du monde entier reçoivent cette erreur: Le problème peut acheminer à partir d'une configuration de proxy code> incorrect ou Vous penseriez qu'une minute serait effectivement assez rapide, mais ce n'est pas le cas. Comme avec ce réseau particulier, il n'est pas siphon à travers les données suffisamment rapides - entraînant ainsi une erreur. P>
Vous avez donc demandé: p>
Ils tentent de prendre en compte le dénominateur commun le plus bas. P>
Simplement, chaque réseau et votre client peuvent avoir un bon degré de trafic ou de retard dans la mesure de l'emplacement souhaité. S'il ne peut pas accéder à la destination dans vos ports Ideal Socket Demander votre utilisateur expérimente une exception. P>
Certaines choses vraiment importantes à savoir sur un réseau: p>
Ce sont quelques variables que vous devez envisager. Si nous parlons d'un Internet; Chaque client a un réseau domestique; qui se connecte à l'ISP; qui se connecte à Internet; qui vous se connecte à vous. Donc, vous avez plusieurs formes de trafic d'être agrégées. p>
Si nous parlons d'un intranet, avec la plupart des technologies de la journée modernes, les chances de votre temps étant un problème sont minces mais toujours possibles. P>
Aussi chaque ordinateur peut participer ou provoquer un problème. Dans Windows 8, le délai d'attente en bref: p>
Ce sont toutes des variables qui doivent être comptabilisées; comme ils auraient un impact sur l'accès à votre application. Malheureusement, vous ne saurez pas pour certains avant de lancer et que les utilisateurs commencent à utiliser votre site. P>
Malheureusement, vous ne saurez pas si votre temps que vous avez spécifié sera suffisant; Mais il est par défaut à un nombre plus élevé car il existe tant de variation dans le monde entier qu'il tente de considérer le dénominateur commun le plus bas. Comme votre objectif est d'atteindre autant de personnes que possible. P>
Au fait, très belle question et de grandes réponses jusqu'à présent. p> clé de registre non valide code> qui gère réellement le délai d'attente code> p>
par défaut code> spécifié pour le navigateur est une minute; Dans certains cas, ces utilisateurs peuvent ressentir des exceptions avec votre application, votre site ou d'autres personnes. Donc, vous modifiez manuellement le
ServertiMeTout code> et
Timetout code> dans le registre pour affecter une valeur plus longue. p>
Les raisons probablement des bowvotes: votre question contient 2 questions non respectables - "Pourquoi quelque chose a fait la façon dont il est fait" - généralement peu susceptible d'obtenir une réponse réelle (et @JustanotherReuseryoumayknow a donné une raison plausable), la seconde - "Validera X Travail pour mon programme i> "- on ne peut pas répondre par personne mais personne qui pose la question. C'est à dire. Dans votre cas, en fonction de l'application et des serveurs impliqués 1 Second timeout pourrait être trop ou 30 secondes trop bas - vous devez évaluer ce qui est acceptable pour votre demande et décidez.
@Alexei Levenkov - Je suis en désaccord sur les deux points. 1. Je pense que «pourquoi quelque chose a été fait comme il est fait» est une question parfaitement valable. 2. 'Validera X Travailler pour mon programme "A) Votre logique autour" Toute personne sauf la personne qui pose la question "n'a pas de sens b) c'est exactement la question qui appartient à un forum comme Stackoverflow. +1
@Tymek, bon point. L'OP a demandé pourquoi les bowvotes dans le commentaire de la Bounty - alors je mets des raisons pour lesquelles les gens auraient pu voter. Notez que différentes personnes lisent la même question différemment et des questions / textes plus suspectes dans la question peuvent facilement déclencher une réaction «mauvaise question». C'est à dire. Je pense que la façon dont la question est posée dans le commentaire de Bounty ne recevrait pas de bowvotes.
@Alexeilevenkov a accepté :)
FWIW, j'ai eu une situation où la solution optimale jusqu'à présent est une courte période de temps, suffisamment longue pour 90% +% des cas, et si cela échoue, puis réessayant, avec un délai beaucoup plus long. Mais c'était une situation quelque peu différente, car la demande était parfois perdue ou poignée, essayant ainsi de nouveau bientôt mieux que d'attendre longtemps avant d'essayer à nouveau.