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):
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 public FichesElevesVM() { ServiceEleveClient client = new ServiceEleveClient(); Fiches = new ObservableCollection<FichesEleve>(client.GetFiches()); editionMode = false; FicheSelectionee = Fiches[0]; client.Close(); }
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 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 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
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="data source=(LocalDB)\MSSQLLocalDB;attachdbfilename=|DataDirectory|\FichesElevesDataBase.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /> </connectionStrings> </configuration>
Voilà, j'espère que vous pourrez m'aider.
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>
Partager