|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Ingénieur développement logiciels Inscription : avril 2012 Messages : 4 ![]() |
Bonjour à tous !
Voila maintenant près de deux jours que je bloque sur ce problème, je viens donc chercher un peu d'aide vers vous. Voici mon souci : J'ai un projet de site web assez conséquent avec des classes et les méthodes pour chacune de ces classes. Lorsque je publie mon site web j'obtiens "App_Code.dll" que je référence dans mon second projet Windows Service. Dans ce service, j'ai une boucle qui doit récupérer une liste d'objets grâce à une méthode static d'une de mes classe (que j'ai placé dans un try/catch avec des entrée de log pour vérifier le bon fonctionnement de mon service). Jusque là, tout se passe bien, je peux générer ma solution, installer mon service et le démarrer sans incident. Cependant, lors de l'appel à cette fonction, une exception est levée: "La référence d'objet n'est pas définie à une instance d'un objet." ce que je ne comprend pas. Si quelqu'un pouvais m’éclairer sur le sujet ça me sauverais la vie, je suis sur le point de tenter la conversion du site web vers une application web sans certitude que cela fonctionne et je préférerais m'en passer (surtout si c'est inutile ^^) Merci d'avance, François |
|
|
00
|
|
|
#2 |
|
Membre éprouvé
![]() Ingénieur développement logiciels Inscription : mars 2011 Messages : 258 ![]() |
Bonjour,
Ce message : "La référence d'objet n'est pas définie à une instance d'un objet." Correspond à NullReferenceException, ça veux dire que quelques part tu a une variable à null. Ca peut être avant l'appel de ta méthode static, pendant l'exécution de cette méthode, après cette l'appel de cette méthode. Regarde les détails de l'exception pour savoir quel variable est en cause, et surtout à quel ligne de code. PS : Site Web, Web Service, Service Windows sont complètement différent, dans quel cas es-tu? |
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Ingénieur développement logiciels Inscription : avril 2012 Messages : 4 ![]() |
Bonjour Antoine !
Déjà merci de venir proposer ton aide Pour l'exception NullReference, c'est exactement ce que je ne comprend pas. Voici mon trycatch: Code :
System.Collections.Generic.List`1[PortailBCRMA_Code.WorkflowEnCours] getAllActiveWfEnCours()App_Code La référence d'objet n'est pas définie à une instance d'un objet. Et la méthode getAllActiveWfEnCours() fonctionne très bien dans mon site web lorsque je l'utilise, ce qui m’amène à penser que c'est l'appel dans le service Windows qui fait défaut. Et je ne vois définitivement pas ce qui peut être null dans tout ça... PS: je suis dans le cas ou j'ai une solution constituée d'un site web (pas une appli web) avec mes classes et un projet de service windows (pas un service web). Je cherche à pouvoir utiliser mes classes dans ces deux projets en référençant la dll obtenue en publiant mon site web. Note que je suis inexpérimenté en .net dans l'ensemble et ce n'est peut-être pas la bonne manière de faire |
||
|
|
00
|
|
|
#4 | ||
|
Membre éprouvé
![]() Ingénieur développement logiciels Inscription : mars 2011 Messages : 258 ![]() |
Au vu du TargetSite, je dirais que l'exception est lancé à l'appel du constructeur de la liste. l'appel qui se situe dans la méthode getAllActiveWfEnCours.
Si tu mets les pdb à coté de ton service, la propriété StackTrace sera correctement renseigné, tu pourra avoir le ligne exacte de code concerné. Tu peux aussi forcer l'attachement d'un Debugger à ton service en rajoutant le code suivant dans celui-ci Code :
|
||
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Ingénieur développement logiciels Inscription : avril 2012 Messages : 4 ![]() |
Ahh bien pratique pour attacher le debugger au démarrage, j'utilisais "attacher au processus ..." avant et j'étais vraiment pas convaincu par l'efficacité de ma méthode
Après quelques essais avec des breakpoints, la valeur null qui me gène vient en fait de cette ligne dans ma méthode: string conn_string = System.Configuration.ConfigurationManager.ConnectionStrings["PortailBCRMA_ConnectionString"].ToString(); qui fait référence à une connection string définie dans mon projet de site web et qui ne doit pas être accessible dans mon projet de service... J'ai aussi cette chaîne de connexion dans les ressources de mon service windows mais j'imagine que ça ne va pas être magiquement considéré comme la même chaîne ![]() Y a t'il un moyen pour permettre à mon service d'accéder à la configuration du site web pour obtenir cette ConnectionString où dois-je changer mes accès à la base de données dans toutes mes classes (avec la chaîne définie dans le code sans passer par le fichier de config) ? Encore merci pour ton aide, j'ai au moins réussi à mettre le doigt sur le véritable problème |
|
|
00
|
|
|
#6 |
|
Membre éprouvé
![]() Ingénieur développement logiciels Inscription : mars 2011 Messages : 258 ![]() |
La "connection string" doit être stocker dans le fichier .config lié à l’exécutable.
Alors que dans un site web, elle est stocker dans le fichier web.config |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Ingénieur développement logiciels Inscription : avril 2012 Messages : 4 ![]() |
J'ai changé le nom de la connection string que j'utilisais dans le service pour correspondre à celui dans web.config mais je trouve ça un peu sale quand même ^^
Disons que ça fonctionne, je vais continuer mon service pour qu'il soit fonctionnel et je verrai plus tard comment faire ça autrement si c'est possible En tout cas merci grandement pour ton aide, j'aurais pas réussi sans toi (pas aussi vite ça c'est sûr). A la prochaine pour d'autres folles aventures François |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com