ASPNETSQLMEMBERSHIPPROVIDER를 사용하는 사이트에 "SQLEXPRESS 데이터베이스 파일 파일 자동 생성 오류"가져 오지만 Connection String은 SQL Server 2005입니다.
-
05-07-2019 - |
문제
나는있다 ASP.NET v2.0
루트 디렉토리가 공개되는 웹 사이트 (웹 응용 프로그램 아님)이지만 "admin"하위 디렉토리에는 인증이 필요합니다. 설정에 대한 모든 것이 매우 일반적입니다. 루트 웹 .config 및 표준에 정의 된 연결 문자열을 사용했습니다. AspNetSqlMembershipProvider
제공자와 ASP.NET 로그인 컨트롤을 사용하고 있습니다.
관리 디렉토리의 web.config는 사용자가 "관리자"역할을 가져야한다고 지정합니다.
사용 중입니다 SQL Server 2008
, 내 연결 문자열은 양호합니다. 모든 루트 레벨 페이지는 데이터 중심이며 모두 잘 작동합니다.
공급자 구성은 끈적 끈적한 것 같습니다.
로그인하면 로그인 컨트롤의 "OnLoggedIn
"이벤트 화재.
이 이벤트 코드의 마지막 줄은 나를 내 Admin/Default.aspx
페이지. "onloggedin"의 내 중단 점은 관리 디렉토리로 리디렉션 될 때까지 모든 것이 잘되어 있음을 보여줍니다 ... 그리고 ... 그리고 ... 그리고 ...
... 그리고 나는 기다렸다 ... 그리고 기다립니다 ...
그리고 나는 그것이 경험이 있다는 것을 알게 된 오류를 얻습니다.SQLExpress database file auto-creation error
."
왜 세계에서 갑자기 SQL Server Express 파일을 만들려고합니까? 왜 갑자기 내 연결 문자열을 무시합니까?
하나의 이상한 단서 : "Onloggedin"이벤트의 마지막 줄 직전에 다음과 같이했습니다.
bool blnTest = User.IsInRole("Admin");
나는보고 싶었다 blnTest = true
.
이 행사 가이 라인에 도달하는 과정이 발생하는 것입니다 ... 기다립니다 ... 결국 SQL Server Express 데이터베이스에 액세스 할 수 없다고 말합니다. 사용자의 역할을 결정하기위한 참조 (내 코드 또는 무대 뒤에서)는 잘못된 데이터베이스를 호출하는 것으로 보입니다.
편집 : Argh, 때때로 내가 blntest를 테스트 할 때 기다립니다. 다른 경우에는 즉시 값을 "False"로보고합니다.
해결책
귀하의 의견에 따르면, 귀하는 귀하가 귀하의 사이트를위한 역할 제공 업체를 명시 적으로 구성하지 않은 것처럼 보입니다.
Web.config에있는 모든 것이 다음과 같은 경우 :
<roleManager enabled="true" />
그런 다음 기본 제공 업체가 구성 Hieracrchy (Machine.Config, Global Web.Config 등)를 더욱 선포 한 기본 제공 업체에 의존하고 있습니다.
machine.config에서 당신은 아마도 다음과 같은 것을 가지고있을 것입니다.
<roleManager>
<providers>
<add name="AspNetSqlRoleProvider"
connectionStringName="LocalSqlServer"
applicationName="/"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
<add name="AspNetWindowsTokenRoleProvider"
applicationName="/"
type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>
보시다시피, 첫 번째 공급자는 LocalAlsqlServer라는 ConnectionString을 사용하도록 구성되어 있습니다.
<add name="LocalSqlServer"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient"/>
그리고 이것은 아직 존재하지 않으면 생성 될 로컬 파일 기반 데이터베이스를 사용하도록 설계되었습니다.
따라서 사이트에서 역할을 수행하려면 루트 Web.config를
<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>
사용u003Cclear /> 요소는 해당 유형의 이전에 정의 된 모든 제공자를 제거합니다.
다른 팁
당신이 지정할 때 AttachDBFilename
연결 문자열의 옵션은 실제로 '사용자 인스턴스'인 여러분의 시간에 제공되는 SQL Server 인스턴스를 요구하는 것입니다. 이 인스턴스는 '마스터'인스턴스 (. sqlexpress 인스턴스)에게 자식 인스턴스를 제공하도록 요청하여 생성됩니다. 이는 마스터/모델/MSDB를 프로필에 복사하여 사용하도록 구성된 계정에서 새 SQL 서버 프로세스를 시작하는 것을 의미합니다. 새로 복사 한 Mas 세부 사항은 설명되어 있습니다 SQL Server 2005 Express Edition 사용자 인스턴스.
자식 인스턴스 생성 프로세스는 매우 깨지기 쉬우 며 연결을 열 때 DB 호출 결과가 결국 타임 아웃 오류로 나눌 때. 귀하의 경우에는 프로세스가 일부 경우 (사이트의 보호 된 부분에 도달 할 때) 프로세스가 깨지는 것 같습니다. 왜 부러지고, 적절한 정보없이 추측하기가 매우 어렵습니다. 를보세요 일반적인 문제 링크 된 기사에서 귀하에게 적용되는지 확인하십시오. 또한 하위 인스턴스가 시작할 수 없거나 MDF 파일을 열 수없는 이유는 시스템 이벤트 로그를 확인하십시오. 일반적인 실수는 다른 자격 증명에서 attachdbfilename이있는 동일한 물리적 파일을 요청하는 것입니다. 각 자격 증명은 자체 '자식'인스턴스를 시작하고 첫 번째는 원하는 데이터베이스를 첨부하는 데 성공합니다.
SQL Server에 대한 서비스가 비활성화 되었기 때문에 같은 문제가있었습니다.
Sqlexpress 서비스가 실행 중인지 확인하려면 Services.msc에서 확인하십시오. 컴퓨터에 SQL Express가 설치되어 있는지 확인하는 경우