2009-02-04 18 views
1

Si vous êtes connecté à Internet directement (et non via un proxy) et demande une page (get/post) dans Internet Explorer 7, le délai par défaut est de 1 minute. Si la réponse du serveur Web prend plus d'une minute, vous obtenez une "erreur de réseau" d'IE.Comment conserver une demande de page IE en vie plus de 1 minute?

Comment puis-je augmenter ce délai d'expiration dans IE?

Microsoft a documenté How to change the default keep-alive time-out value in Internet Explorer, mais cela ne fonctionne pas dans mon PC (Windows XP SP2, IE 7.0).

Est-ce que quelqu'un là-bas a une idée sur la façon d'y parvenir?

Merci

+0

Est-ce vraiment une question de programmation? – Niyaz

+0

Peut-être, peut-être pas. Existe-t-il un moyen de programmation par lequel vous pouvez maintenir la requête jusqu'à ce que le traitement lourd dans le serveur soit terminé? –

Répondre

0

De même article,

Si soit le navigateur client (Internet Explorer) ou le serveur Web a une valeur KeepAlive inférieure , il est le facteur limitant . Par exemple, si le client a un délai d'attente de deux minutes et que le serveur Web a un délai d'expiration d'une minute , le délai maximal est une minute . Le client ou le serveur peut être le facteur limitant.

Cela peut être la raison pour laquelle les paramètres ne fonctionnent pas pour vous.

+0

@Niyaz: Point valide, mais je n'ai pas ce problème lorsqu'il est connecté via un proxy. La page renvoie OK après 3 minutes et à partir de là, mon inférence est que le délai d'expiration du serveur Web est OK. –

3

KB813827 parle de keepalives HTTP 1.1, qui ont trait au maintien d'une connexion TCP ouverte au serveur en dehors d'une requête. Ce n'est pas la même chose que votre problème, qui maintient une connexion en vie lors d'une requête. Pour configurer le délai d'expiration par connexion, voir KB181050.

En supposant que l'angle de programmation est ici que vous essayez d'écrire un script côté serveur qui prend beaucoup de temps pour terminer:

Pour éviter le moment de la demande, vous devez avoir le retour de script côté serveur quelque chose de temps en temps pour rassurer le navigateur que le serveur n'est pas mort et un résultat sera à venir. La manière dont vous pouvez faire cela dépend des technologies côté serveur que vous utilisez. Tout ce qui attend que tout le corps de la réponse et les en-têtes soient complétés avant d'envoyer quoi que ce soit au client est sorti. Dans par exemple. CGI vous pouvez retourner un corps de réponse avec 'Transfer-Encoding: chunked' pour cracher quelques octets de temps en temps et garder la connexion en vie. Sinon, renvoyez une page immédiatement et lancez le processus long en arrière-plan, puis demandez à la page côté client d'interroger pour l'achever.

+0

@bobince: Dans le serveur Web, la page appelle certaines méthodes d'un système tiers qui prend beaucoup de temps (plus de 60 secondes) à terminer. Je suppose que votre dernière déclaration est ce que je pourrais utiliser ici. Serait-il possible pour vous de recommander des échantillons sur Internet en utilisant une méthode similaire? –

+0

Quel langage de programmation, serveur web?Sur un serveur * nix, vous pouvez double-fork pour "démoniser" votre long processus à partir du script, ou avoir un processus backend "job de traitement" en arrière-plan que les scripts web peuvent communiquer via un socket. – bobince

+0

Tout à fait une ancienne application web; ASP/COM parlant à SAP RFC. Le SAP RFC est le processus qui prend du temps. –