pma3d
Messages postés36Date d'inscriptionlundi 13 juin 2005StatutMembreDernière intervention14 septembre 2005
-
2 sept. 2005 à 10:19
pma3d
Messages postés36Date d'inscriptionlundi 13 juin 2005StatutMembreDernière intervention14 septembre 2005
-
14 sept. 2005 à 14:22
Bonjour à tous.
Voilà, pour ceux qui suivent mes posts, mon projet avance. Je pensais
en avoir terminé avec les difficultés, mais hier, j'ai encore eu droit
à un plantage que je n'arrive pas à résoudre (sinon, je ne serais pas
là )
Donc, je rappelle en gros l'architecture de mon projet :
client C# ---- Service Web C# -- DLL C# -------- DLL C++ managé ----- DLL C++ (1)
|-------------------------- DLL C++ managé ----- DLL C++ (2)
Mon service web est donc actuellement relié aux branches 1 et 2. Toute cette partie est close, elle marche parfaitement.
La suite de mon projet est simple : j'ai d'autres DLL C++, que je dois
encapsuler en C++ Managé, et mon service web pourra ensuite les
utilise, étapes que j'ai donc réalisé avec une nouvelle DLL. A la fin,
j'aurais une multitude de branches identiques à la branche 2.
Mais voilà, après avoir ajouté une référence à ma nouvelle DLL MC++
dans mon service web, lorsque je lance le service, j'ai droit à une
belle "erreur de configuration", le message d'erreur étant que : "Une
procédure importée par 'nouvelleDll' ne peut pas être chargée."
Et en dessous, classiquement, on m'indique que le code plante à l'instruction 'add assembly="*"' de machine.config.
Et, encore en dessous, le message suivant :
Pre-bind state information LOG: DisplayName = lxwmLandcoverAccess
(Partial)
LOG: Appbase = file:///c:/inetpub/wwwroot/AfficheCartoWSCS
LOG: Initial PrivatePath = bin
Calling assembly : (Unknown).
=
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Post-policy reference: lxwmLandcoverAccess
LOG: Attempting download of new URL file:///C:/WINNT/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/affichecartowscs/2777d7e7/1551f0c7/lxwmLandcoverAccess.DLL.
LOG: Attempting download of new URL file:///C:/WINNT/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/affichecartowscs/2777d7e7/1551f0c7/lxwmLandcoverAccess/lxwmLandcoverAccess.DLL.
LOG: Attempting download of new URL file:///c:/inetpub/wwwroot/AfficheCartoWSCS/bin/lxwmLandcoverAccess.DLL.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Post-policy reference: lxwmLandcoverAccess, Version=1.0.2071.15451, Culture=neutral, PublicKeyToken=null
Alors, je tiens à signaler que je n'ai aucun problème de path ou autre
de ce genre, puisque les DLL utilisées dans les branches 1 et 2 sont
exactement au même endroit que la nouvelle. Pour preuve, comme j'ai
apparemment un problème avec une procédure introuvable, le tout marche
très bien dès que j'enlève toutes les méthodes de ma classe MC++. Il
reste alors les instructions en début de fichier (include, define,
...), la déclaration de la classe, et ses attributs dont quelques types
enum. Dès que j'ajoute une méthode (n'importe laquelle), le service web
ne se lance pas.
Voilà, j'espère sincèrement que quelqu'un pourra m'aider, c'est
tellement frustrant d'être si près du but ! J'ai cherché sur le net,
mais 98% des cas d'"erreur de configuration" sont liés à une référence
vers l'assembly manquant, ou quelque chose dans ce genre, avec un
message d'erreur du type : "le fichier ou l'assembly nommé "machin", ou l'une de ses dépendances, est introuvable." (je sais de quoi je parle, j'en ai été victime !)
Merci d'avance à ceux qui auront lu ce post jusque là, et surtout à
ceux qui m'aideront, en espérant tomber qur quelqu'un qui a déjà eu le
même problème !
TheSaib
Messages postés2367Date d'inscriptionmardi 17 avril 2001StatutMembreDernière intervention26 décembre 200723 2 sept. 2005 à 15:15
La clé tu l'as généré, en théorie cette clé tu devrais la garder pour chacun de tes Dev, c'est "ton identifiant", qui prouve que c'est toi qui à développer.
Cette clé est donc identique à chaque fois, il n'y pas de raison que tu ais des problèmes, c'est seulement une signature.
Si tout est OK pense à accepter les réponses pour fermer le thread.
TheSaib
Messages postés2367Date d'inscriptionmardi 17 avril 2001StatutMembreDernière intervention26 décembre 200723 2 sept. 2005 à 12:09
Ou sinon par curiosité, tes DLL tu les aurais pas mis dans le debug/bin de ton appli ? Si c'est le cas essaye de mettre tes dll dans le repertoire System32, pour voir si ca marche.
Vous n’avez pas trouvé la réponse que vous recherchez ?
pma3d
Messages postés36Date d'inscriptionlundi 13 juin 2005StatutMembreDernière intervention14 septembre 2005 2 sept. 2005 à 12:26
J'étais justement en train d'écrire que je l'avais fait depuis
longtemps, c'est le conseil qui revient le plus souvent pour ce genre
de problèmes. Mais, bien sûr, ça ne change rien.
Cependant, j'ai peut-être une piste, trouvée en utilisant l'outil
Assembly Binding Log Viewer. Lorsque je charge ma dll, le log est le
même que ci-dessus, logique.
Mais quand je modifie ma dll en enlevant toutes les méthodes qu'elle
contient, la dll est chargée, et j'ai un premier log qui indique que le
chargement a bien réussi :
LOG: Attempting download of new URL file:///C:/WINNT/Microsoft.NET/Framework/v1.1.4322/lxwmLandcoverAccess.DLL.
LOG: Attempting download of new URL
file:///C:/WINNT/Microsoft.NET/Framework/v1.1.4322/lxwmLandcoverAccess/lxwmLandcoverAccess.DLL.
LOG: Attempting download of new URL file:///C:/WINNT/Microsoft.NET/Framework/v1.1.4322/lxwmLandcoverAccess.EXE.
LOG: Attempting download of new URL
file:///C:/WINNT/Microsoft.NET/Framework/v1.1.4322/lxwmLandcoverAccess/lxwmLandcoverAccess.EXE.
LOG: All probing URLs attempted and failed.
Et effectivement, aux emplacements indiqués dans le log précédent, il
n'y avait pas la dll. Alors, à tout hasard, j'ai tenté, et ça ne marche
toujours pas.
Je viens aussi d'essayer dans System32, et ça ne marche pas...
pma3d
Messages postés36Date d'inscriptionlundi 13 juin 2005StatutMembreDernière intervention14 septembre 2005 2 sept. 2005 à 13:35
Je n'ai pas de app.config, mais je suppose qu'il s'agit en fait de
l'équivalent en WinForm du fichier web.config en WebForm... mais je ne
sais pas où mettre cette ligne.
J'ai essayé au début, et à d'autres endroits, mais ça fait apparaître
une boîte de dialogue d'erreur : Erreur lors de l'éxecution du projet
etc...
pma3d
Messages postés36Date d'inscriptionlundi 13 juin 2005StatutMembreDernière intervention14 septembre 2005 2 sept. 2005 à 13:55
Merci pour ton aide, mais, encore une fois, je pense que la balise
runtime ne s'applique que dans le cas des WebForm. Dans mon web.config
en revanche, j'ai juste sous la balise configuration une balise
<system.web> qui est à mon avis l'équivalent de runtime. J'ai
donc placé assemblybinding dedans, et la même boîte de dialogue
apparaît toujours.
A tout hasard, j'ai quand même essayé en ajoutant la balise runtime, mais ça ne change rien
pma3d
Messages postés36Date d'inscriptionlundi 13 juin 2005StatutMembreDernière intervention14 septembre 2005 2 sept. 2005 à 14:09
Euh, je débute plus ou moins en .NET, et je ne sais pas trop comment on
fait pour mettre les assemblys dans le GAC, mais en faisant tout
simplement glisser/déposer dans le gac, une boite de dialogue m'indique
que mes dlls ne portent pas de nom fort..
pma3d
Messages postés36Date d'inscriptionlundi 13 juin 2005StatutMembreDernière intervention14 septembre 2005 2 sept. 2005 à 14:25
OK, je vais essayer tout ça, mais il y a un truc qui me paraît bizarre
: j'avais trouvé la commande gacutil en cherchant rapidement sur le
net, mais lorsque je tente de l'utiliser, elle n'est pas trouvée. Donc,
il manque une variable d'environnement, alors est-ce que mon problème
ne pourrait pas venir de là ?
TheSaib
Messages postés2367Date d'inscriptionmardi 17 avril 2001StatutMembreDernière intervention26 décembre 200723 2 sept. 2005 à 14:28
non
Ca c'est parceque tu utilises le shell normal. Il faut utiliser le shell visual studio, qui est dans le menu démarrer, programme , visual studio, outil visual , prompt ...
pma3d
Messages postés36Date d'inscriptionlundi 13 juin 2005StatutMembreDernière intervention14 septembre 2005 2 sept. 2005 à 15:02
Alors, ça a pris du temps parce qu'il me réclamait de mettre toutes les
autres DLL dans le gac, mais finalement, ça a marché ..... que trois
fois...
J'ai d'abord recompilé ma dll pour être sûr que j'essayais avec la
bonne version et pas avec celle sans méthodes. Ca n'a pas marché tout
de suite, mais après avoir remis la nouvelle DLL dans le gac et après
avoir redémarré IIS (ça ne marchait pas avant), le service s'est lancé
2 fois.
J'ai ensuite modifié le service, et depuis, ça ne marche plus, malgré les redémarrages d'IIS....
Si tu as des idées, je t'écoute...
En tous cas, merci pour ton aide TheSaib, tu m'as fait entrevoir une lueur d'espoir !!!
pma3d
Messages postés36Date d'inscriptionlundi 13 juin 2005StatutMembreDernière intervention14 septembre 2005 2 sept. 2005 à 15:12
Ok, c'est ce que je pensais avoir fait, mais ça ne devait pas être le
cas. Effectivement, j'ai réessayé plusieurs fois entre temps, et en
n'oubliant pas de déployer la nouvelle dll et de redémarrer iis, ça
marche.
Par contre, j'ai une petite question liée à l'utilisation du gac : la
clé reste identique tout le temps ? Du moment qu'elle ne change ou ne
bouge pas, je n'aurais pas de problèmes de ce côté ?
pma3d
Messages postés36Date d'inscriptionlundi 13 juin 2005StatutMembreDernière intervention14 septembre 2005 2 sept. 2005 à 15:18
Ok, merci merci merci ! Je viens de gagner un temps fou grâce à toi
(surtout que je n'aurais jamais pensé à ça). C'est cool d'avoir de
l'aide efficace !
pma3d
Messages postés36Date d'inscriptionlundi 13 juin 2005StatutMembreDernière intervention14 septembre 2005 2 sept. 2005 à 16:20
Et ben non !!! Thread pas terminé puisqu'en fait ..... ça marche pas.
J'ai voulu aller plus loin en utilisant mon service web, dont le
constructeur contient un appel au constructeur de ma fameuse dll.
Et lorsque je lance le service, tout va bien, mais lorsque je
l'utilise, j'ai exactement le même message d'erreur, mais côté client
cette fois :
System.Web.Services.Protocols.SoapException: Le serveur n'a pas pu
traiter la demande. ---> System.IO.FileLoadException: Une procédure importée
par 'lxwmLandcoverAccess' ne peut pas être chargée. Nom du fichier :
"lxwmLandcoverAccess" at ServiceWebClass..ctor() --- Fin de la trace de la
pile d'exception interne ---
Alors, du coup, j'ai testé en enlevant l'appel au constructeur, et
là, tout redevient normal.En fait, l'erreur précédente n'a été que
reportée, puisque j'avais aussi le problème de cette procédure importée
qui ne pouvait pas être chargée......
Si tu es encore la TheSaib, j'aimerais abuser de ton temps et te
demander de continuer à suivre mon cas. Les recherches que j'ai fait
sur le net à propos de procédure importée non chargée ne conduisent à
rien, alors je ne peux compter que sur moi et vous !!!!
pma3d
Messages postés36Date d'inscriptionlundi 13 juin 2005StatutMembreDernière intervention14 septembre 2005 3 sept. 2005 à 18:05
Désolé, mais je ne peux plus bosser dessus maintenant, je suis en weekend !
Par contre, j'y ai un peu réfléchi, et lundi, je ferais du ménage dans
mes dlls. Je pense qu'il y a peut-être quelque part des versions de
dlls qui sont chargées alors que ce ne sont pas les bonnes. Parce que,
je trouve ce comportement bizarre : la branche 2 de mon schéma en haut
est parfaitement identique à la nouvelle branche que je tente
d'ajouter, et le fait d'avoir versionner les dlls grace à ton aide ne
peut que faire en sorte que tout marche correctement. Bref, je te tiens
au courant dès lundi !
Sinon, oui, je mets bien à jour la référence web à chaque changement.