IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entity Framework Discussion :

L'echec du fournisseur sous-jacent sur open


Sujet :

Entity Framework

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Rien
    Inscrit en
    Décembre 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Rien

    Informations forums :
    Inscription : Décembre 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut L'echec du fournisseur sous-jacent sur open
    J'ai un service wcf lié à une application cliente (en WPF) sur visual studio, je débute avec tout ça. Le but de mon application est de stocker des fiches dans une base de donnée liée au service wcf(avec entity framework) le service renvoie donc mes fiches à l'application cliente, on peut également ajouter, retirer ou modifier une fiche, en plus de champs classiques, (noms, prenom,...) chaque fiche a une image stockée dans la db sous la forme d'un tableau de byte(ce qui m'a obligé à changer la propriété "MaxReicevedMessageSize" dans mon fichier de configuration).
    Mon application fonctionne parfaitement sur visual studio en mode débug, mais quand j'ai voulu publier mon service web sur IIS, après avoir suivi les différentes étapes. Lorsque j'ai lancé mon application cliente, au moment de l'appel de ma méthode GetFiches, mon code m'a renvoyé l'erreur suivante: "echec du fournisseur sous-jacent sur open".
    Détails de l'exception:



    ___________________________________________________________________________________________________________________________________
    System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail] : Échec du fournisseur sous-jacent sur Open. (le détail de l'erreur est égal à ExceptionDetail, probablement créé par IncludeExceptionDetailInFaults=True, dont la valeur est :
    System.Data.Entity.Core.EntityException: Échec du fournisseur sous-jacent sur Open. ----> System.Data.SqlClient.SqlException: Une erreur liée au réseau ou spécifique à l'instance s'est produite lors de l'établissement d'une connexion à SQL Server. Le serveur est introuvable ou n'est pas accessible. Vérifiez que le nom de l'instance est correct et que SQL Server est configuré pour autoriser les connexions distantes. (provider: SQL Network Interfaces, error: 50 - Erreur de Local Database Runtime s'est produite. Impossible de créer une instance automatique. Pour plus de détails sur l'erreur, consultez le journal des événements d'application Windows.
    ___________________________________________________________________________________________________________________________________




    Ca m'a l'air d'être lié à ma base de donnée, c'est pourquoi je poste mon message dans cette section.
    Mais, ce que je comprends pas, c'est que ca marche parfaitement en debug (avec iis express), donc est-ce qu'il faut donner à IIS les doits d'accès à un dossier spécial ou quelque chose comme ça?
    IIS a le contrôle total sur le répertoire de ma solution, donc sur le fichier de la db, mais est-ce qu'il faudrait pas lui donner l'accès à un autre truc? Ou est-ce qu'il faut configurer quelque chose avec SQL server comme mentionné en haut, je précise que je ne connais absolument rien à "SQL server".

    Ci-joint:

    Le constructeur de mon ViewModel client où ça plante (pour être précis: il plante à la ligne 2):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public FichesElevesVM()
            {
                ServiceEleveClient client = new ServiceEleveClient();
                Fiches = new ObservableCollection<FichesEleve>(client.GetFiches());
                editionMode = false;
                FicheSelectionee = Fiches[0];
                client.Close();
            }
    La méthode GetFiches de mon service dont l'appel fait tous planter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
            public ObservableCollection<FichesEleve> GetFiches()
            {
                ObservableCollection<FichesEleve> collec = null;
                using (FichesElevesDataBaseEntities entities = new FichesElevesDataBaseEntities())
                {
                    collec = new ObservableCollection<FichesEleve>(entities.Eleves.Select(eleve => new FichesEleve()
                    {
                        Adresse = eleve.Adresse,
                        Classe = eleve.Classe,
                        Email = eleve.Mail,
                        Image = eleve.Image,
                        Nom = eleve.Nom,
                        Id = eleve.Id,
                        Numero = eleve.Telephone,
                        Prenom = eleve.Prenom,
                        Ville = eleve.Ville,
                    }));
                }
                return collec;
            }
    Mon fichier web.Config (config cote service)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <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>
      <appSettings>
        <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
      </appSettings>
      <system.web>
        <compilation debug="true" targetFramework="4.5.2" />
        <httpRuntime targetFramework="4.5.2" />
        <httpModules>
          <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
        </httpModules>
      </system.web>
      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <!-- Pour éviter la divulgation d'informations de métadonnées, définissez les valeurs ci-dessous sur false avant le déploiement -->
              <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
              <!-- Pour recevoir les détails de l'exception dans les erreurs à des fins de débogage, définissez la valeur ci-dessous sur true. Pour éviter la divulgation d'informations d'exception, définissez-la sur false avant le déploiement -->
              <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <protocolMapping>
          <add binding="basicHttpsBinding" scheme="https" />
        </protocolMapping>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
      </system.serviceModel>
      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true">
          <remove name="ApplicationInsightsWebTracking" />
          <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" />
        </modules>
        <!--
            Pour parcourir le répertoire racine de l'application Web lors du débogage, définissez la valeur ci-dessous sur true.
            Définissez-la sur false avant le déploiement pour ne pas divulguer d'informations du dossier de l'application Web.
          -->
        <directoryBrowse enabled="true" />
        <validation validateIntegratedModeConfiguration="false" />
            <handlers>
                <add name="svc-integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler" resourceType="File" preCondition="integratedMode" />
            </handlers>
      </system.webServer>
      <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
          <parameters>
            <parameter value="mssqllocaldb" />
          </parameters>
        </defaultConnectionFactory>
        <providers>
          <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
        </providers>
      </entityFramework>
      <connectionStrings>
        <add name="FichesElevesDataBaseEntities" connectionString="metadata=res://*/FichesEleveDataModel.csdl|res://*/FichesEleveDataModel.ssdl|res://*/FichesEleveDataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\MSSQLLocalDB;attachdbfilename=|DataDirectory|\FichesElevesDataBase.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
      </connectionStrings>
    </configuration>
    Mon fichier App.Config (config côté client)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
        </startup>
        <system.serviceModel>
            <bindings>
                <basicHttpBinding>
                    <binding name="BasicHttpBinding_IServiceEleve" />
                </basicHttpBinding>
            </bindings>
            <client>
                <endpoint address="http://127.0.0.1/ServiceEleve.svc" binding="basicHttpBinding"
                    bindingConfiguration="BasicHttpBinding_IServiceEleve" contract="FichesEleveServiceReference.IServiceEleve"
                    name="BasicHttpBinding_IServiceEleve" />
            </client>
        </system.serviceModel>
    </configuration>
    Voilà, j'espère que vous pourrez m'aider.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Salut,

    Quand tu lance ton service WCF dans visual studio l'utilisateur qui se connecte à la base de données est ton utilisateur connecté à ta session Windows (qui doit avoir les droits sur la base de données).

    Par contre quand tu déploies sur IIS l'utilisateur utilisé pour se connecté à la base de données est ton utilisateur IIS qui ne doit pas avoir les droits sur ton serveur SQL Server.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Rien
    Inscrit en
    Décembre 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Rien

    Informations forums :
    Inscription : Décembre 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Ok, alors j'ai changé les autorisations de C:\Program Files (x86)\Microsoft SQL Server Compact Edition et de C:\Program Files (x86)\Microsoft SQL Server et ca le fait toujours.

    Je viens de trouver dans le journal d'événement windows un message d'erreur:
    _________________________________________________________________________________________________
    Impossible d'obtenir un chemin d'accès aux données de l'application locale. Cela est probablement dû au fait qu'un profil utilisateur n'est pas chargé. Si la base de données locale est exécutée sous IIS, vérifiez que le chargement de profil est activé pour l'utilisateur actuel.
    __________________________________________________________________________________________________
    que veut dire activer le chargement du profil?

    Et il alterne deux erreurs, celle que j'ai montrée précédément et celle-ci:
    ______________________________________________________
    L'appel de l'API Windows SHGetKnownFolderPath a retourné le code d'erreur*: 5. Le message d'erreur système Windows est*: Accès refusé.
    Signalé à la ligne*: 422.
    ______________________________________________________

Discussions similaires

  1. Échec du fournisseur sous-jacent sur Open
    Par sayfouche dans le forum Entity Framework
    Réponses: 3
    Dernier message: 27/11/2013, 08h39
  2. Réponses: 0
    Dernier message: 16/05/2013, 06h27
  3. Erreur Fournisseur sous-jacent C# SqlServer
    Par kevindeta dans le forum Développement
    Réponses: 5
    Dernier message: 12/01/2012, 09h09
  4. Peut-on tester un enregistrement dans form sur open?
    Par samlepiratepaddy dans le forum Access
    Réponses: 7
    Dernier message: 13/09/2005, 12h33
  5. Réponses: 3
    Dernier message: 24/01/2005, 11h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo