Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Bonjour à tous
voilà depuis maintenant plus d'un mois, je rencontre de gros problèmes avec une application distribuée sur un serveur Citrix.
De manière on va dire totalement aléatoire l'application de ferme purement et simplement ou affiche l'un des messages d'erreur suivant :
- System.NullReferenceException: Object reference not set to an instance of an object
- System.InvalidOperationException : ExecuteReader requires an open and available connection
- Cannot create new connection because in manual or distributed transaction mode.
A savoir qu'une fois cette deconnection (avec ou sans message d'erreur) arrivée, on peut relancer l'application, refaire exactement les mêmes opérations et ne plus avoir ce problème jusqu'à (5min, 1 heure, plus ...)
J'ai pu isoler je pense le problème, il doit arriver lors du bind d'une datawindow
Détail technique :
- l'application est compilée en PB 10.0 Build 4510
- on se connecte à une base SQL Server 2005 via ADO.NET (OleDb)
- le serveur Citrix a un framework .NET 1.1
De plus, je n'arrive JAMAIS à reproduire le problème directement sous PB.
De plus je reproduis sur mon poste extremement rarement le problème alors que certains postes utilisateurs ont ces deconnections de l'ordre d'une bonne vingtaine par jour
Le plus étrange est que ce problème est apparu sans qu'il n'y ait eu de livraison effectuée, c'est arrivé du jour au lendemain. Les fréquences de déconnexion sont totalement variable. J'ai bon améliorer le code, effectuer de nombreuse optimisations mais rien n'y fait.
Des analyses au niveau infrastructure ont été faites et on m'assure que :
- la configuration sur la serveur Citrix n'a pas changé
- il n'y a aucun problème de flux réseau
- la base de données n'est pas endommagée
Avez vous déjà été confronté à ce problème ? Savez d'où peut provenir la cause, car j'ai beau poser des logs au niveau applicatif je ne trouve vraiment rien de signification
Merci beaucoup
Hors ligne
Après avoir lu plusieurs site, la solution se trouverait peut être dans la désactivation du OLE DB Resource Pooling.
Quelqu'un peut il me dire où piloter celà depuis PB, car je n'ai aucun paramètre de connexion concernant le pooling
Hors ligne
Apparemment c'est en base de registre : http://it.toolbox.com/wiki/index.php/Ch … ing_Status
Hors ligne
Merci
Nous venons de le désactiver sur notre serveur de test, je vais tester tout celà
Hors ligne
Bon en bien cette solution ne marche pas, j'ai eu un plantage au bout d'une heure d'utilisation
Par contre nous sommes en train d'essayer autre chose : les requetes qui seraient incriminées ont un point commun, elles n'ont pas de clause ORDER BY ...
Dernière modification par Worldinmyeyes (26-04-2010 14:21:31)
Hors ligne
Et bien ce pas celà non plus : au bout de 20 minutes, à la fin de l'exécution d'une requete, j'ai eu un System.NullReferenceException: Object reference not set to an instance of an object.
Dans le log encore une fois, l'erreur se produit après la requete select (qui a duré 500ms ce qui n'est déjà pas normal) et avant le BIND OUTPUT DATAWINDOW
Et quand je redémarre l'application la même requete fonctionne de nouveau ...
Je ne sais plus trop où chercher ...
Dernière modification par Worldinmyeyes (26-04-2010 15:17:18)
Hors ligne
dans ton profil de connexion tu as "disable bind" et "static bind" ?
Hors ligne
Oui ils sont tous les deux à 1
J'ai essayé de les mettre alternativement à 0 puis tous les 2 à 0, mais celà ne résoud pas le problème
Hors ligne
as-tu essayé en utilisant le client natif SQL (SNC) ?
Il y a d'ailleurs un paramètre de pooling :
Connection pooling
The SNC interface pools connections automatically using OLE DB pooling. To disable OLE DB pooling, type the following in the Extended Properties box on the Connection tab page in the Database Profile Setup dialog box:
OLE DB Services=-4
You can also type the following statement in code:
ProviderString='OLE DB Services=-4'
Autre piste : SQLCA.Lock='RC'
Hors ligne
Bonjour,
Si vraiment il n'y a eu aucune modification sur le serveur (Windows update ?) et que le problème est apparu d'un seul coup, la volumétrie des données a bien dû augmenté.
Juste une idée, le manque de ressources peut être éventuellement responsable de ce comportement, as-tu essayé d'augmenter la mémoire allouée à la session citrix pour voir
si les choses s'améliore ?
Hors ligne
Sais tu comment faire modifier la quantité de mémoire allouée
Celà veut dire qu'il aurait un paramètre qui fixerait la quantité de mémoire ? Où trouve t'on celà sur les paramètres Citrix ?
Hors ligne
Je ne connais l'environnement Citrix. Mais, il est certain qu'il y a un paramètre qui limite la quantité de mémoire pouvant être alloué à une session.
Dans ce type d'environnement, un seul utilisateur ne peut pas s'approprier toute la mémoire disponible sur le serveur, il en faut pour les autres.
Hors ligne
On a changé les requetes où les problèmes apparaissient : le code PB a été changé par des procédures stockées
La fréquence des messages d'erreur a diminué légèrement mais le problème persiste toujours.
Au niveau des logs, lorsque la requete se passe bien, le temps de réponse a diminué par rapport à l'ancienne méthode, par contre dès que l'erreur arrive ou va arriver les temps de réponse sont tous supérieurs à 200-300 ms
Serait ce un problème de trafic réseau ?
Hors ligne
Si le serveur Citrix est "à côté" du serveur BDD, il ne devrait pas y avoir de pb de trafic réseau...
Hors ligne
Pages: 1