SQL Compact 4.0, déploiement sur un serveur distant, et exceptions à distance.

Pour mon projet personnel de site web, que je réalise avec MVC 4.0 (et chaque jour je me félicite un peu plus d’avoir pris la bonne décision), j’utilise Team Foundation Services, la version cloud de Team Foundation Server, et Windows Azure pour l’hébergement, au moins en phase test. Les deux sont gratuits pour moi, donc aucune raison de s’en priver. Il est possible de lier les deux, de manière à avoir un déploiement automatique entre TFS et Azure. Parfait.

D’autant plus parfait que cette méthode de build, tests et déploiements en continu m’a permis de me rendre compte de problèmes que je ne suspectais pas une seconde, puisque, bien évidemment, avant de lancer le moindre archivage, je teste sur ma machine, et tout fonctionnais sans la moindre anicroche. Je soufrais du WOMM syndrome! (Work On My Machine).

En fait, je suis en train de mettre en place, maintenant que la première étape de base de création du site est faite, un système (très classique), d’enregistrement et d’identification utilisateur utilisant SQL Compact. Après déploiement sur le site distant, dés que je cliquais sur “Register”, j’obtenais une erreur très succincte, me disant qu’une erreur ne permettait pas d’obtenir le formulaire. But it WOMM! What’s happening ????

Blog_erreurWeb

 

La première étape était donc de tacher d’obtenir une erreur détaillée. En regardant ce qui se passait avec les outils développeurs dans Firefox, j’ai pu voir que j’obtenais une erreur HTTP 500, mais cette erreur est un peu fourre-tout et cela ne m’aidait pas beaucoup. Il fallait que j’obtienne l’exception avec tous ses détails. Après avoir “Googlé” à droite à gauche, et trouvé pas mal de fausses pistes, j’ai fini par dénicher la bonne solution, assez simple, en fait. Dans le fichier Web.config, à l’intérieur de la section System.web, vous devriez trouver quelque chose comme ceci (c’est la configuration par défaut que j’avais):

Il suffit de remplacer cette définition de customErrors par celle-ci:

pour obtenir cette page sur l’erreur:

Blog_Exception_details

Voilà qui me parle bien mieux! Je pensais bien que l’erreur avait à voir avec la base de données, mais là j’ai quelque chose de précis à partir duquel je peux chercher la solution. Donc, Google à nouveau, pour trouver pas mal d’idées, notamment en ce qui concerne les bonnes DLLs pour SQL Compact copiées au bon endroit. Je vérifie soigneusement, mais le déploiement étant fait en automatique par Microsoft Azure, j’aurais été étonné que ce soit la cause. Après la lecture de pas mal de pages où le diagnostique ne me semblait pas adapté à mon problème, j’ai enfin trouvé la solution, bien plus simple que je ne le craignais, même si je ne m’explique toujours pas pourquoi tout fonctionnait en local sans cela.

L’erreur indique clairement que la base de sécurité ne peut pas être initialisée. Toutes mes vérifications me montrent que toutes les DLLs nécessaires sont sur le système, au bon endroit. Donc, il me faut trouver un moyen d’indiquer à l’application que le Provider est SQL Compact, et, encore une fois, la solution se trouve dans quelques lignes à ajouter au web.config:

Et voilà, comme par magie, sans besoin de recompiler et de redéployer, juste en écrasant l’ancien web.config avec une copie FTP, l’erreur disparait et je peux enfin accéder au formulaire d’enregistrement sur le site:

Blog_RegisterPage

N’oubliez pas de remettre le customErrors par défaut. Il est possible, une fois le système de login mis en place, de se baser dessus pour envoyer les erreurs détaillées selon le rôle affecté à l’utilisateur (role developper), mais cela fera l’objet d’un futur billet.. J’espère simplement que le récit de mes tribulations puissent permettre à d’autres de gagner un peu de temps.

Publié dans .Net, C#, ASP.NET MVC 4.0 Tagués avec : , , ,
5 commentaires sur “SQL Compact 4.0, déploiement sur un serveur distant, et exceptions à distance.
  1. This post really peaked my interest.

  2. r4itt dit :

    Thanks for sharing, this is a fantastic blog.Really thank you! Awesome.

  3. Guy Provost dit :

    Salut… j'ai le même problème et lorsque je déploie sur Azure, malgré les modifications, ça me donne le même résultat! NOTE: Nous ne pouvons pas voir votre code au complet dans les extraits que vous offrez!

    • Bernard dit :

      Bonjour Guy, et merci du commentaire. En effet, une partie du code est coupée, je ne m'en étais pas aperçu. Je vais tacher d'y remédier rapidement. Quels genre de billets aimeriez-vous voir?

    • Bernard dit :

      Encore merci de la remarque concernant le code, ça m'a permis de faire une modification nécessaire.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Lettre d’information

Recherche sur le Site

Recherche personnalisée