none
Service WCF hébergé dans une console app et localdb RRS feed

  • Question

  • Bonjour à tous et toutes,

    Je me tourne vers vous ce soir car j'ai un problème, que certains trouveront peut être amusant mais qui est en tout cas bien embêtant.

    Décidé à découvrir WCF, et aussi parce qu'on me l'a demandé, j'ai développé mon service sans problème. J'ai ensuite développé une petite application console permettant de le tester (en ajoutant une référence de service), pas de problème non plus, la base de données LocalDB est donc localisée dans le dossier App_Data du projet WCF.

    Ensuite, je veux utiliser netTcpBinding pour le transport plutôt que basicHttpBinding. N'ayant pas réussi à configurer cela correctement dans mon projet WCF (mais ça c'est un autre sujet), j'ai créé une application console qui héberge mon service (en lui passant une référence à la dll générée par mon projet WCF, et qui, soit dit en passant, nécessite également une référence à EntityFramework. J'ai alors configuré mon application cliente pour qu'elle utilise l'application hôte en netTcpBinding plutôt que la référence de service en utilisant un ChannelFactory, bref, pas de soucis là non plus. Cela fonctionne parfaitement.

    Le problème, oui oui il y en a bien un, c'est que je ne parviens pas à trouver où est stockée ma base de données LocalDB, le fichier .mdf donc. J'ai au début pensé qu'il s'agirait du même, mais pas du tout, les données ne sont pas les mêmes. Donc aucune idée d'où se trouve cette base. J'ai fait une recherche sur tout mon disque avec le nom que celle ci avait dans mon projet WCF mais je n'ai rien trouvé !

    Si vous pouvez m'aider à percer ce mystère, je suis bien sûr tout ouïe !

    Bonne soirée !


    • Modifié Samuel LIOULT lundi 13 avril 2015 20:53 Correction orthographique
    lundi 13 avril 2015 20:51

Réponses

  • Bonjour,

    Je viens aujourd'hui poster un élément de réponse à mon problème.

    Ma solution (fonctionnelle) est de modifier la connectionString, comme le disais Richard, mais directement dans le code, dans le constructeur du DbContext comme ceci :

    Database.Connection.ConnectionString = "Server=(localdb)\\v11.0;AttachDbFilename=<chemin désiré>\\database.mdf;Integrated Security=true;";

    Cela me crée donc ma base là où je le souhaite. Cependant, je ne sais donc pas où était ma base de données initiale. Mais c'est résolu ;-)

    Bonne journée !

    jeudi 16 avril 2015 12:09

Toutes les réponses

  • Regardez le ConnectionString dans votre fichier de configuration cela vous donnera la solution


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 14 avril 2015 05:26
  • Bonjour Richard,

    Tout d'abord merci de l'intérêt porté à mon problème.

    Toutefois, je n'ai pas de ConnectionString dans mon fichier de configuration.

    Voici ce qu'il comporte concernant la base de données (fichier Web.config du projet WCF) :

    <configSections>
        <!-- For more information on Entity Framework   configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </configSections>

    et

    <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
          <parameters>
            <parameter value="v11.0" />
          </parameters>
        </defaultConnectionFactory>
      </entityFramework>

    Pour rappel, cela fonctionne lorsque j'utilise un référence au service sans l'héberger dans une application console. Je n'ai absolument rien modifier concernant la base de données.

    Merci

    EDIT : J'ai ajouté une méthode à mon service WCF retournant la ConnectionString à partir d'une instance du DbContext (db.Database.Connection.ConnectionString) et voici le retour :

    Server=(localdb)\\v11.0;Integrated Security=true;

    mardi 14 avril 2015 06:41
  • http://stackoverflow.com/questions/16706852/where-is-my-database-and-how-do-i-view-it

    En gros, elle est là : C:\Users\<USER NAME>\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\v11.0


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 14 avril 2015 06:48
  • Richard,

    Merci pour cette nouvelle réponse apportée. Cependant, j'avais déjà regardé dans ce dossier et il n'y a pas de base portant le nom de mon DbContext :

    De ce fait, je ne vois pas trop où la chercher...
    mardi 14 avril 2015 10:29
  • Personne n'a de solution supplémentaire à m'apporter ?

    J'ai vraiment du mal à comprendre, j'ai beau chercher, je ne vois pas où elle peut être...

    Merci..

    mercredi 15 avril 2015 10:37
  • Bonjour,

    Je viens aujourd'hui poster un élément de réponse à mon problème.

    Ma solution (fonctionnelle) est de modifier la connectionString, comme le disais Richard, mais directement dans le code, dans le constructeur du DbContext comme ceci :

    Database.Connection.ConnectionString = "Server=(localdb)\\v11.0;AttachDbFilename=<chemin désiré>\\database.mdf;Integrated Security=true;";

    Cela me crée donc ma base là où je le souhaite. Cependant, je ne sais donc pas où était ma base de données initiale. Mais c'est résolu ;-)

    Bonne journée !

    jeudi 16 avril 2015 12:09
  • Le problème est résolu je sais, mais pour répondre à ta question concernant la localisation de ta base de donnée initiale, LocalDB crée la ldf et le mdf à cet endroit par défaut :

    C:\Users\<USERNAME>\

    vendredi 8 avril 2016 11:20