Erreur de configuration

Résolu
pma3d Messages postés 36 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 14 septembre 2005 - 2 sept. 2005 à 10:19
pma3d Messages postés 36 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 14 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 !

21 réponses

TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
2 sept. 2005 à 12:05
Essaye de couper le microsoft indexer service. Parfois c'est lui qui peut provoquer ceci.
3
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
2 sept. 2005 à 13:57
On va essayer autre chose

Essaie de mettre tes assembly dans le gac.

::|The S@ib|::
MVP C#.NET
3
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
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.
3
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pma3d Messages postés 36 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 14 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 :





= Pre-bind state information ===


LOG: Where-ref bind. Location = C:\developpements\lxwmLandcoverAccess\Debug\lxwmLandcoverAccess.dll


LOG: Appbase = C:\WINNT\Microsoft.NET\Framework\v1.1.4322\


LOG: Initial PrivatePath = NULL


LOG: Dynamic Base = NULL


LOG: Cache Base = NULL


LOG: AppName = NULL


Calling assembly : (Unknown).


=


LOG: Processing DEVPATH.


LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).


LOG: Attempting download of new URL file:///C:/developpements/lxwmLandcoverAccess/Debug/lxwmLandcoverAccess.dll.


LOG: Assembly download was successful. Attempting setup of file:
C:\developpements\lxwmLandcoverAccess\Debug\lxwmLandcoverAccess.dll


LOG: Entering run-from-source setup phase.













Mais j'ai aussi un autre log qui m'indique le contraire :


= Pre-bind state information ===


LOG: DisplayName = lxwmLandcoverAccess, Version=1.0.2071.19650, Culture=neutral, PublicKeyToken=null
(Fully-specified)


LOG: Appbase = C:\WINNT\Microsoft.NET\Framework\v1.1.4322\


LOG: Initial PrivatePath = NULL


LOG: Dynamic Base = NULL


LOG: Cache Base = NULL


LOG: AppName = NULL


Calling assembly : (Unknown)


===


LOG: Processing DEVPATH.


LOG: DEVPATH is not set. Falling through to regular bind.


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.19650, Culture=neutral, PublicKeyToken=null


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...
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
2 sept. 2005 à 13:25
Dans ton app.config essaye de mettre un probing path pour tes dll perso :
0
pma3d Messages postés 36 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 14 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...
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
2 sept. 2005 à 13:48
configuration>configuration>
<runtime>



</runtime>

::|The S@ib|::
MVP C#.NET
0
pma3d Messages postés 36 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 14 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
0
pma3d Messages postés 36 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 14 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..
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
2 sept. 2005 à 14:21
Ok Ok,

Tout d'abord tu dois générer une paire de clés à l'aide de l'outil sn (ligne de commande).

sn -k c:\macle.snk

dans ton assembly.cs de tes dll il y a un endroit avec de mémoire :
[ASsemblyKeyFile], tu y met le chemin vers ta clé.


Ensuite tu la met dans le GAC :
gacutil /i pathdelassembly.


A priori je n'ai rien oublié.

N'oublie pas de redemarrer regulierement IIS (iisreset /restart)
0
pma3d Messages postés 36 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 14 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à ?
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
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 ...
0
pma3d Messages postés 36 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 14 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 !!!
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
2 sept. 2005 à 15:04
Le GAC fait du versionning sur tes DLL. Si tu recompiles, faut re-deployer dans le GAC, et redemmarrer IIS
0
pma3d Messages postés 36 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 14 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é ?
0
pma3d Messages postés 36 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 14 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 !

Thread terminé !
0
pma3d Messages postés 36 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 14 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 !!!!

Help me !!!!!
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
3 sept. 2005 à 17:27
Je suis là.

Est ce que tu mets bien a jour la reference du webservice du client quand tu modifies ton webservice ?

Car a chaque fois que tu le modifies, le proxy qui fait le lien entre ton client et le webservice doit êtr regénéré.
0
pma3d Messages postés 36 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 14 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.
0
Rejoignez-nous