Problème avec les métadonnées dans la chaîne de connexion Entity Framework

entity-framework forms-authentication silverlight silverlight-4.0 wcf-ria-services

Question

J'ai une application Silverlight 4 utilisant les services RIA dans laquelle j'ai déplacé tout le code spécifique aux services RIA vers un module séparé (une bibliothèque de classes des services RIA WCF) appelé "AppServices". Appelons l'application principale "Silverlight4App". Je dois authentifier les utilisateurs auprès d'une base de données différente de celle où sont stockées les autres données. J'ai ajouté un modèle EF à AppServices.Web, qui héberge également le service d'authentification. Le fichier Web.config se trouve dans l'application principale, c'est-à-dire dans Silverlight4App.

Dans la section connectionStrings du fichier web.config, j'avais à l'origine ceci:

<add name="AuthEntities" connectionString="metadata=res://*/AuthModel.csdl|res://*/AuthModel.ssdl|res://*/AuthModel.msl;provider=... />

et j'ai eu l'erreur suivante:

"Échec du chargement de la requête 'GetUser'. Impossible de charger la ressource de métadonnées spécifiée."

Ensuite, j'ai essayé diverses choses telles que:

<add name="AuthEntities" connectionString="metadata=..\..\bin\AuthModel.csdl|..\..\bin\AuthModel.ssdl|..\..\bin\AuthModel.msl;provider=... />

et j'ai cette erreur:

"Le chargement a échoué pour la requête 'GetUser'. Le chemin de métadonnées spécifié n'est pas valide. Un chemin valide doit être un répertoire existant, un fichier existant portant l'extension '.csdl', '.ssdl' ou '.msl', ou un URI qui identifie une ressource intégrée. "

J'ai également essayé de copier les fichiers de métadonnées à différents endroits. Au final, je suis un peu plus loin avec ce qui suit.

<add name="AuthEntities" connectionString="metadata=~\..\..\..\Silverlight4App.Web\Metadata\AuthModel.csdl|~\..\..\..\Silverlight4App.Web\Metadata\AuthModel.ssdl|~\..\..\..\Silverlight4App.Web\Metadata\AuthModel.msl;provider=... />

Avec la chaîne de connexion ci-dessus, j'ai eu l'erreur suivante:

"Le chargement a échoué pour la requête 'GetUser'. La chaîne de connexion fournie n'est pas valide, car elle contient des informations insuffisantes sur les mappages ou les métadonnées. \ R \ nNom du paramètre: connectionString Message d'exception interne: Impossible de déterminer le contexte de l'application. Chemin d'accès de l'application ASP.NET ne pouvait pas être résolu. "

Au moins, il semble avoir trouvé les fichiers de métadonnées! Par frustration, j'ai finalement essayé de coder en dur l'intégralité du chemin d'accès aux fichiers de métadonnées:

<add name="AuthEntities" connectionString="metadata=C:\Users\...\Silverlight4App.Web\Metadata\AuthModel.csdl|C:\Users\...\Silverlight4App.Web\Metadata\AuthModel.ssdl|C:\Users\...\Silverlight4App.Web\Metadata\AuthModel.msl;provider=... />

Cela a fonctionné parfaitement !! Malheureusement, c'est une solution moche , surtout quand je vais déployer l'application.

Il semble étrange que la tentative que j'ai tentée juste avant la tentative codée en dur (voir ci-dessus) se soit plainte de l'insuffisance d'informations. Pourtant, la tentative codée en dur, qui visait exactement les mêmes fichiers , semble contenir suffisamment d'informations. Hmm ...

Des idées? Je pourrais sûrement avoir besoin d'aide!

Réponse acceptée

Regardez dans l’assemblage compilé avec Reflector pour voir si les ressources sont là; s'ils le sont, ils devraient être accessibles en utilisant la première méthode. Sinon, il y a quelque chose qui ne va pas dans votre déploiement. vous avez toujours la possibilité de les déployer en tant que fichiers volants bien sûr. Si cela ne vous aide pas, demandez des éclaircissements, je serai à mon bureau demain avec le code sous la main pour expliquer plus avant (je devais traiter avec quelque chose comme ça il y a quelque temps).


Réponse populaire

De mon expérience: les métadonnées lors de l'accès via le système de fichiers se font par chemin relatif vers Environment.CurrentDirectory . Si quelque chose change cette valeur, cela gâchera vos chemins relatifs s'il est donné depuis le chemin exe. En raison de cette contrainte, il est plus stable d'utiliser une ressource incorporée.

Remarque: lors de la compilation en tant que ressource intégrée, le nom complet de la ressource est différent de celui utilisé lors de la compilation d'un edmx via EntityDeploy . Utilisez le ilasm ou le reflector pour extraire les ressources compilées afin de vous assurer du nom de la ressource si vous rencontrez toujours des difficultés pour obtenir les métadonnées à accepter / à trouver ...



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow