Quand un même code serveur est exécuté dans un site ou un webservice sur plusieurs serveurs web différents, il donne toujours le même résultat. Mais comme souvent, un serveur peut faire l'exception qui confirme la règle...

 

Voici une astuce et un code réutilisable pour orienter rapidement les recherches, dès qu'un serveur ne permet pas d'avoir la réponse attendue pour un traitement, une fonctionnalité, ou l'appel d'une fonction WLangage.

 

Lorsqu'un même code serveur d'un site ou d'un webservice WEBDEV déployé sur plusieurs serveurs ne donne pas le même résultat, c'est généralement l'environnement d'exécution qui diffère d'un serveur à l'autre. En effet, en fonction des stratégies de sécurité, de la configuration du réseau, des choix des administrateurs, l'environnement d'exécution peut différer, et donc avoir une incidence sur un traitement, ou une fonctionnalité.


Dans ce cas afin d'orienter les recherches, il est possible d'exécuter la fonction SysEnvironnement sur les deux serveurs. En effet cette fonction permet de récupérer une information dans l'environnement du serveur, ou même tout l'environnement. Elle peut être appelée dans une page de test, une page d'administration, ou pourquoi par directement dans le code du projet en fonction d'un paramètre passé dans l'url (un paramètre peut être récupéré par la fonction PageParamètre).


Voici un exemple pour récupérer tout l'environnement dans un PDF :

 

sEnvironnementServeur est une chaîne
sNomFichier est une chaîne = "Environnement_%1_%2.pdf"
sNomFichierComplet est une chaîne

sNomFichier = ChaîneConstruit(sNomFichier, ExeDonnePID(), HeureVersChaîne(Maintenant(), "HH.MM.SS.CC"))
sNomFichierComplet = fRepDonnées()+[fSep]+sNomFichier


iDestination(iPDF, sNomFichierComplet)
sEnvironnementServeur = SysEnvironnement()

iImprime(ChaîneConstruit("Récupération de l'environnement du serveur %1 le %2 à %3", NetNomMachine(), DateVersChaîne(DateSys()), HeureVersChaîne(Maintenant)))
iImprime("Données extraites par la fonction SysEnvironnement dans le fichier :")
iImprime(sNomFichierComplet)
iImprime("Code serveur exécuté depuis le serveur d'application WEBDEV "+VersionWINDEV(versionFramework)+RC+RC)

POUR TOUTE chaîne sLigneEnvironnement de sEnvironnementServeur SEPAREE PAR RC
iImprime(sLigneEnvironnement)
FIN
iFinImprime()

FichierAffiche(sNomFichierComplet, "application/pdf", sNomFichier)

 

La comparaison de l'environnement de 2 serveurs permet généralement de remonter à la source d'une différence. On découvre le plus souvent des entêtes HTTP qui n'ont pas été exposées dans l'environnement pour accroitre la sécurité, mais qui sont nécessaires pour le traitement en question...

 

Parfois il peut s'agir d'un même code sur un seul serveur, mais auquel on accède par deux façons différentes : par son adresse au travers d'un réseau interne, ou par le domaine qui donne accès au même serveur, mais depuis l'extérieur.

< Retour

Publier un commentaire : 
Votre adresse email ne sera pas publiée