Hello!
Je vous soumets ici un probleme (peut être certains diront tiré par les cheuveux, mais dont j'ai besoin d'une solution...) qui pourrait être un bug du framework... Et c'est un peu la question.
Je vais essayé de résumé de façon simple la situation:
Dans un évènement Delphi (par exemple XMLModule.BeforeDispatch, mais peu importe en faite), j'ai une dacquery toute simple qui va checker une donnée dans la base. (un simple select sur une table X)
A coter, j'ai un xmlservice, avec un DBExtract qui contient une template (select champ1 from tableY where {$param} ).
Si param est corretement renseigné, toute mon execution se déroule normalement. (Pour le test, je renseigne ma template directement depuis le navigateur... pour le test seulement)
A présent, je place volontairement une erreur sql dans ma template param (par exemple une colonne qui n'existe pas)... Mon service en question me donne une erreur: logique. (Erreur SQL machin, invalid column name...)
Lors du prochain appel, je rétablis mon param avec une valeur sql correct... tout devrait rentrer dans l'ordre!
Eh bien non! Ma DacQuery placée dans mon XMLModule, refuse de se reconnecter comme si j'avais perdu la connexion à la BDD et on obtient une "défaillance irrémédiable"... Il faut iisreseter !
En gros, dès qu'une erreur SQL apparait sur un XMLModule, celui-ci semble perdre la connexion et part complètement en carafe.
Est ce que vous pouvez reproduire ce phénomène ? Comment faire pour ne pas déstabiliser tout le module apres une templace mal renseignée?
Michael
PS: voici un test-case simple sur la base de démo de SQLServer:
Créez une nouvelle appli vers la base 'pubs'
Créez un nouveau service qui liste simplement la table 'jobs' et ajoutez un template:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT jobs.job_id, jobs.job_desc, jobs.min_lvl, jobs.max_lvl {$JOB} FROM jobs jobsDepuis Delphi et dans l'évènement BeforeDispatch du XMLModule, saisissez le code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 DacQuery1.close; if not DacQuery1.prepared then DacQuery1.prepare; DacQuery1.open; DacQuery1.close;Posez une DacQuery et saisissez le code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT authors.au_id, FROM authors authorsRecompliez et a present testez depuis le navigateur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 .../MyProject1.dll/listJobs?JOB= -> Ca marche .../MyProject1.dll/listJobs?JOB=,MMMM -> erreur SQL .../MyProject1.dll/listJobs?JOB= -> Ca marche plus et ca devrait!Le module est indisponible (à cause de la requete dans le BeforeDispatch), il faut faire un iisreset
![]()
Partager