7
votes

Obtenir une "erreur de création automatique de la base de données SQLEPPress" pour le site qui utilise ASPNetsQLMembershipProvider, mais la chaîne de connexion est de SQL Server 2005

J'ai un site Web ASP.NET V2.0 Site Web (pas d'application Web) où le répertoire racine est public, mais le sous-répertoire "admin" nécessite une authentification. Tout sur la configuration est très générique - j'ai utilisé une chaîne de connexion définie dans la racine web.config et le fournisseur Standard aspnetsqlMembershipProvider et j'utilise le contrôle de connexion ASP.NET.
Le Web.config dans le répertoire d'administration Spécifie que l'utilisateur doit avoir le rôle "Admin".

J'utilise SQL Server 2008 et ma chaîne de connexion est bonne; Chaque page de niveau de racine est entraînée par des données et elles fonctionnent tous bien.
La configuration du fournisseur semble goo.

Lorsque je vous connecte, le contrôle de la connexion " Onloggedin " Feux d'événement "
La dernière ligne de ce code d'événement me redirige vers mon admin / par défaut.aspx page. Mon point d'arrêt dans "Onloggedin" montre que tout va bien jusqu'à la redirection de mon répertoire administratif ... et ...

... et j'attends ... < / p>

et puis je reçois une erreur me dise que cela a été expérimenté une erreur de base de base de données " sqlexpress" / code> "

pourquoi dans le monde essaie-t-il soudainement de Créer un fichier SQL Server Express? Pourquoi est-ce qu'il ignore soudainement ma chaîne de connexion?

Un indice impair: juste avant la dernière ligne de l'événement "Onloggedin", je mets dans ce: xxx > Je voulais voir si blntest = true .
Ce qui se passe, c'est que le processus frappe cette ligne ... et l'attend ... Et finit par me dire qu'il ne peut pas accéder à la base de données SQL Server Express. Il semble que toute référence (soit dans mon code, soit dans les coulisses) de déterminer le rôle de l'utilisateur, appelle la mauvaise base de données.

EDIT: Argh, parfois il attend quand je Test Blntest. D'autres fois, il signale immédiatement la valeur comme "FALSE".


2 commentaires

Quelle est la chaîne de connexion pour votre rôle proviseur? Est-ce la même chose que votre authentificationProvider?


Cette partie du web.config est simplement cette ...


3 Réponses :


1
votes

Lorsque vous spécifiez l'option jointdbfilename dans la chaîne de connexion, vous demandez en réalité une instance SQL Server à provisionnée à l'heure tout-juste-in-thermique, alias "l'instance utilisateur". Cette instance est créée en demandant à l'instance "Master" (la. \ SQlexPress Instance) de fournir une instance enfant, qui implique de copier le maître / modèle / MSDB dans votre profil, lancez un nouveau processus SQL Server sous votre compte configuré pour utiliser le Master / Modèle / MSDB fraîchement copié, puis demandez à cet instance «enfant» pour joindre le «fichier» spécifié comme une nouvelle base de données. Les détails sont expliqués dans SQL Server 2005 Edition Express Edition Instances < / a>.

Le processus de création d'une instance enfant est extrêmement fragile et lorsqu'il brise les résultats d'appel de DB éventuellement dans une erreur de temps d'arrêt lors de l'ouverture de la connexion. Dans votre cas, il semble que le processus se casse dans certains cas (lorsque vous atteignez la partie protégée du site). Pourquoi il se casse, est très difficile à deviner sans informations appropriées. Regardez les problèmes communs dans l'article lié et voyez si cela s'applique à vous. Vérifiez également le journal des événements système pour n'importe quel message pourquoi les instances enfants ne peuvent pas démarrer ou ne peuvent pas ouvrir le fichier MDF. Notez qu'une erreur commune consiste à demander le même fichier physique avec attachdbfilename sous différentes informations de passe: chaque identification démarrera sa propre instance «enfant» et que seul le premier réussira à joindre la base de données souhaitée.


6 commentaires

Comme je l'ai dit, j'utilise SQL Server 2008, pas un fichier MDF. Ma chaîne de connexion n'a pas d'attachdbfilename. Source de données = myserver; Catalogue initial = WebSitéb; ID utilisateur = myuserid; mot de passe = myPassword;


Zhaph a déjà expliqué pourquoi le LocalSqlServer est utilisé (c'est-à-dire une instance utilisateur express)


Seulement parce que j'ai eu tous les détails des commentaires;)


Merci Zhaphe, oui, tu as cloué et m'a rappelé de garder la machine.Config en tête. Et Remus, concernant le commentaire que Zhaph "Déjà" a expliqué le problème express, l'ordre des commentaires était: Mon poste d'origine, la question de Nick sur le rôle des propriétés de rôle, ma réponse à Nick, votre mention de votre mention d'express, puis de la réponse gagnante de Zhaphe. Je n'essayais pas d'essayer de travailler, j'essayais de l'éviter complètement.


@Tom: Sry Tom, je ne voulais pas dire «déjà» pour être dérogatoire de quelque manière que ce soit. Je voulais juste dire que je peux garder mon commentaire court et ne pas entrer dans les détails.


@Tom Hehe - Vous utiliserez SQL Server, mais ASP.NET a déjà fait des plans!



13
votes

Selon votre commentaire, il semble que vous n'ayez pas explicitement configuré un fournisseur de rôle pour votre site.

Si tout ce qui est dans votre web.config est le suivant: p>

<roleManager enabled="true">
  <providers>
    <clear />
    <add name="AspNetSqlRoleProvider" 
      connectionStringName="YourConnectionStringName" 
      applicationName="/" 
      type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
  </providers>
</roleManager>


3 commentaires

Merci, je sais que cette question est très ancienne mais c'était aussi une grande aide pour moi. Une question, je sais avoir dans mes deux et sections. On dirait qu'ils contiennent les mêmes informations. Est-ce que quelqu'un sait pourquoi j'ai besoin des deux?


Parce que vous pouvez avoir des différents (par exemple, vous voudrez peut-être un fournisseur de rôle personnalisé qui prend en charge les rôles hérités, alors que vous êtes satisfait du fournisseur de membres par défaut). De plus, si vous regardez de près, vous verrez qu'ils sont différents: on ajoute le fournisseur SQL Adhésion , tandis que l'autre ajout du rôle SQL Rôle .


Il est utile de savoir que la configuration appartient à l'élément dans le web.config de votre site



0
votes

J'ai eu le même problème qui était dû aux services pour SQL Server étant désactivé.

Vérifiez sous Services.MSC pour voir si le service SQLEXPress fonctionne. Si c'est chèque pour voir si SQL Express est installé sur votre machine


0 commentaires