ASPNETSQLMEMBERSHIPPROVIDER를 사용하는 사이트에 "SQLEXPRESS 데이터베이스 파일 파일 자동 생성 오류"가져 오지만 Connection String은 SQL Server 2005입니다.

StackOverflow https://stackoverflow.com/questions/1402430

문제

나는있다 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가 설치되어 있는지 확인하는 경우

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top