Problème aléatoire sur les web services

Problème aléatoire sur les web services - HTML/CSS - Programmation

Marsh Posté le 03-03-2015 à 11:39:45    

Bonjour,
 
Ma boîte fournit une solution de saisie des temps/planification pour des entreprises de consulting. Les utilisateurs se connectent en web sur l'adresse IP de notre serveur qui héberge l'application, et un port propre à leur société et à leur version de l'application. Ils arrivent sur une page de connexion login/mot de passe, et en se connectant, ils tombent sur une page unique fonctionnant par onglets, AJAX, web services (la page n'est donc jamais rechargée tout le long de la navigation).
 
Actuellement j'ai des utilisateurs qui rencontrent un problème récurrent mais pas systématique : ils font leur vie sur la page web de l'appli (consulter leur planning, saisir des temps jour par jour, demander des congés, créer des notes de frais...), et toutes ces actions diverses provoquent le lancement de web services. J'en viens au problème : à un moment donné, il peut arriver, durant l'exécution d'un web service (à noter que ça se produit parfois dès la connexion), qu'ils aient un pop-up d'erreur avec un message de type : "http://ip:port/fichier.js" (avec évidemment l'IP du serveur, leur port dédié, et le nom d'un fichier JS de l'application). En validant ce message d'erreur ils retournent sur la page de connexion. Le nom du fichier JS est variable, j'imagine que ça dépend dans quel fichier JS se trouve le web service qui a planté (si ça plante lors d'une demande de congés, c'est le nom du fichier JS traitant les congés qui est afficher dans le pop-up).
 
J'ai pu obtenir un screen d'un utilisateur avec la console de Chrome ouverte, ce sera plus parlant :
http://img11.hostingpics.net/thumbs/mini_431462bug.png
 
J'ai évidemment cherché des infos sur ces messages d'erreur, mais rien ne semble correspondre à leur cas (version de Chrome, le fait que ce soit aléatoire, pare-feu...).
 
Voici quelques infos importantes :
- Actuellement sur les deux boîtes qui utilisent notre application (bêta-testeurs), ce sont les seuls a rencontré le problème
- Tous ces problèmes ont été constatés avec une connexion 4G
- Des speedtests ont été réalisés par les utilisateurs pile au moment du bug, et ils sont plus que corrects
- Ce bug dure généralement un laps de temps très court (il survient une fois, oblige l'utilisateur à se reconnecter, et ne survient plus avant un moment), mais c'est arrivé qu'il dure quelques secondes (il survient, oblige l'utilisateur à se reconnecter, et survient encore au moment de la reconnexion, nécessitant parfois trois ou quatre essais), voire quelques minutes
- J'utilise un service de monitoring qui teste la connexion à l'application sur leur port, avec un de leurs logins/mots de passe, toutes les minutes, et il n'a jamais relevé de problèmes (à part quand notre serveur a crashé :o )
- Nous n'avons jamais constaté ce problème durant le développant, soit des milliers d'essais sur plusieurs adresses (dont la leur)
 
Merci beaucoup.

Reply

Marsh Posté le 03-03-2015 à 11:39:45   

Reply

Marsh Posté le 03-03-2015 à 15:45:58    

psychodarksquall a écrit :


- Tous ces problèmes ont été constatés avec une connexion 4G


 
Un problème au niveau de l'itinérance des données ?


---------------
~¤Mon topic Achat/Vente¤~
Reply

Marsh Posté le 03-03-2015 à 16:03:03    

pimous78920 a écrit :


 
Un problème au niveau de l'itinérance des données ?


 
 
Qu'entends-tu par là ? Tu parles de l'itinérance des données de manière générale, ou de l'option intitulée "Itinérance des données" qui sert à utiliser des réseaux mobiles d'autres opérateurs ?

Reply

Marsh Posté le 03-03-2015 à 16:21:32    

T'as vu qu'en rouge, il indique un time out sur le chargement de ressource, j'imagine, le fichier js qui pose pb ?
 
Je pense que le pb se situe sur le transport des données (donc pb réseau et non applicatif), problème qu'on a peu de chance de rencontrer sur un réseau local de dév. Sans doute un pb transitoire et ponctuelle. A voir si en réduisant le poids des fichiers (si c'est possible) si ça le fait encore... Y'as des compacteurs de code js ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 03-03-2015 à 16:35:56    

rufo a écrit :

T'as vu qu'en rouge, il indique un time out sur le chargement de ressource, j'imagine, le fichier js qui pose pb ?
 
Je pense que le pb se situe sur le transport des données (donc pb réseau et non applicatif), problème qu'on a peu de chance de rencontrer sur un réseau local de dév. Sans doute un pb transitoire et ponctuelle. A voir si en réduisant le poids des fichiers (si c'est possible) si ça le fait encore... Y'as des compacteurs de code js ;)


 
Oui j'ai vu ce qu'il y a en rouge quand même :D Justement tout porte à croire que c'est un problème de réseau.
 
Les tests n'ont pas été faits que sur le réseau local de dév, l'appli est déployée en interne pour nos services et donc des mecs s'y connectent depuis chez eux ou d'autres villes en Wi-Fi ou Ethernet, et on n'a jamais eu un seul problème.
 
Mais j'y connais rien en réseaux, je suis étonné que leurs speedtests soient bons en même temps que le problème est présent. Mais oui je leur ai déjà signalé qu'un réseau 4G pouvait être instable et que la moindre microcoupure normalement invisible à l'utilisation pouvait du coup stopper net le fonctionnement.
 
Merci j'irai voir les compacteurs de code, et oui il y a sûrement beaucoup à faire pour améliorer le fonctionnement de l'appli et l'échange des données avec le serveur (pour te dire il n'y a pas de formulaires, que des web services et de l'AJAX, parfois plusieurs tournant en même temps).

Reply

Marsh Posté le 04-03-2015 à 16:59:14    

Faudrait regarder à combien est fixé le timeout (au bout de combien de temps le navigateur laisse tomber le chargement d'une ressource). Est-ce en ms ou en secondes ?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 04-03-2015 à 20:50:20    

rufo a écrit :

Faudrait regarder à combien est fixé le timeout (au bout de combien de temps le navigateur laisse tomber le chargement d'une ressource). Est-ce en ms ou en secondes ?


 
+1
 
Et accessoirement, il faudrait aussi que l'applie prévoit ce genre de situation, gère l'erreur et éventuellement cherche à retenter 1 ou 2 fois in the background, puis, si ca ne marche toujours pas, alors afficher un message d'erreur personnalisé et non laisser le navigateur s'en charger. :/
 
Ca ressemble quand même à un truc un peu codé à l'arrache et/ou jamais complètement terminé.

Reply

Marsh Posté le 04-03-2015 à 22:40:18    

OK merci je regarderai ça.
 

Citation :

Ca ressemble quand même à un truc un peu codé à l'arrache et/ou jamais complètement terminé.


 
Ca c'est la version courte :o En vrai ça ressemble à trois développeurs juniors développant quatre applications en même temps sur trois langages différents et sur PC et mobiles en plus de faire du support technique et de gérer les problèmes de serveurs avec un turn-over important, pas de spécs écrite, pas de chef de projet, et un boss qui change d'avis toutes les semaines et qui pense qu'une appli mobile ça prend un mois à développer sur iOS quand on connaît même pas le langage :love:  :pt1cable: :cry:

Reply

Marsh Posté le 05-03-2015 à 10:18:17    

Encore un projet bien parti :/
 
Tiens, tu passeras ces stats à ton Boss : http://fr.wikipedia.org/wiki/Project_management_office
Ca le fera peut-être réfléchir et à changer de méthode...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-03-2015 à 10:58:06    

Hello,
 
Je reviens aux nouvelles avec quelques précisions :
- les fichiers JS font entre 600 et 3500 lignes chacun
- chacun des modules "Timesheet", "Frais", "Planning" et "Congés" (c'est-à-dire les quatre fichiers JS correspondant) est chargé via un webservice à l'ouverture du site
- ces modules comptent eux-mêmes plusieurs webservices qui seront lancés lors de diverses actions de l'utilisateur (parfois très rapidement voire en même temps)
 
Sinon effectivement il n'y a pas de gestion de timeout ni d'erreur pour le timeout (d'autres erreurs sont gérées quand même).

Reply

Marsh Posté le 10-03-2015 à 10:58:06   

Reply

Marsh Posté le 11-03-2015 à 16:38:12    

Bonjour,
 
Pourriez-vous m'indiquer où se paramètre le timeout/retry sur un web service et comment gérer les erreurs qui en découlent ?
 
Merci.

Reply

Marsh Posté le 11-03-2015 à 17:03:47    

psychodarksquall a écrit :

Bonjour,
 
Pourriez-vous m'indiquer où se paramètre le timeout/retry sur un web service et comment gérer les erreurs qui en découlent ?
 
Merci.


 
?? ben ca dépend complètement comment a été programmé le bouzin... Si c'est basé sur jquery, ca se gère directement sur les appels Ajax.

Reply

Marsh Posté le 11-03-2015 à 17:26:34    

La partie client combine YUI et JQuery mais il n'y a absolument rien sur un quelconque timeout.
 
La partie serveur est en 4D. Oui oui c'est un langage qui existe... Ça doit sûrement être là...
 
Voici la fonction JS utilisée pour tous les webservices (perso j'y pige rien) :
 

Code :
  1. function WS(_methode, _params, _callbackSuccess, _callbackFailure) {
  2.         var SOAPRequete = '<?xml version="1.0" encoding="UTF-8" ?>'
  3.                 + '<SOAP-ENV:Envelope '
  4.                 + 'SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"'
  5.                 + ' xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" '
  6.                 + 'xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" '
  7.                 + 'xmlns:xsd="http://www.w3.org/2001/XMLSchema" '
  8.                 + 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'
  9.                 + '<SOAP-ENV:Body>'
  10.                 + '<mns:'
  11.                 + _methode
  12.                 + ' xmlns:mns="http://www.4d.com/namespace/default/">';
  13.         for (var i = 0; i < _params.length; i++) {
  14.             if (_params[i].type === "string" ) {
  15.                 _params[i].valeur = _params[i].valeur.replace(/&/g, '&amp;').replace(/</g, '&lt;');
  16.             }
  17.             SOAPRequete = SOAPRequete
  18.                     + ' <FourD_arg' + (i + 1) + ' xsi:type="xsd:'
  19.                     + _params[i].type + '">' + _params[i].valeur
  20.                     + '</FourD_arg' + (i + 1) + '>';
  21.         }
  22.         SOAPRequete = SOAPRequete + '</mns:' + _methode + '>'
  23.                 + '</SOAP-ENV:Body>' + '</SOAP-ENV:Envelope>';
  24.         var cfg = {
  25.             on: {
  26.                 failure: function(id, o, args) {
  27.                     if (typeof _callbackFailure !== "undefined" && _DEBUG === false) {
  28.                         _callbackFailure(o.responseXML);
  29.                     } else {
  30.                         var message = "";
  31.                         if (o.responseXML) {
  32.                             message = getNodeText(o.responseXML.getElementsByTagName("faultstring" )[0]);
  33.                         } else {
  34.                             try {
  35.                                 message = _methode + "\n" + o.statusText;
  36.                             } catch (e) {
  37.                                 message = _methode;
  38.                             }
  39.                         }
  40.                         show_error_dialog(message);
  41.                     }
  42.                 },
  43.                 success: function(id, o, args) {
  44.                     _callbackSuccess(o.responseXML);
  45.                 }
  46.             },
  47.             method: "POST",
  48.             data: SOAPRequete,
  49.             xdr: {
  50.                 dataType: 'xml'
  51.             },
  52.             headers: {
  53.                 "Content-Type": "text/plain; charset=utf-8",
  54.                 "SoapAction": "A_WebService" + "#" + _methode
  55.             }
  56.         };
  57.         Y.io("/4DSOAP", cfg);
  58.     }

Reply

Marsh Posté le 23-06-2015 à 15:32:27    

Bonjour,
 
Le problème est toujours là mais j'ai une nouvelle piste, une erreur qui apparaît dans la console de Chrome lorsque le plantage survient : Failed to load resource: net::ERR_EMPTY_RESPONSE.
 
J'ai vu sur le net que ça pouvait être propre à Chrome et à un problème de cache du PC voire du routeur. J'ai testé avec FireFox chez le client où ça plante souvent avec Chrome et effectivement ça fonctionnait nickel avec le renard alors qu'en même temps ça plantait avec Chrome.
 
Ceci dit je reste dubitatif, je pense que c'est seulement une partie du problème, parce que leurs autres applications ne plantent pas spécialement avec Chrome, et en plus ça le fait pas systématiquement, et pas à tout le monde.
 
Ça vous donne des idées ?
 
Merci.


Message édité par psychodarksquall le 02-07-2015 à 10:59:03
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed