2017-03-03 24 views
0

의 원인 내 로컬 컴퓨터에 SQL Server Compact Toolbox를 설치 한 다음 .mdf 파일을 웹 사이트 호스트 SQL Server 인스턴스에 연결합니다., 지금 WebSecurity 내가 최근에 SQL 서버 2014에 SQL 서버 CE에서 데이터베이스를 마이그레이션</p> <p>우리는 ASP.Net 웹 페이지를 사이트를 사용하여 구축 한 SQL 제한 시간

모든 것이 잘 작동했으며 사이트가 정상적으로 작동하는 것처럼 보였습니다.

System.Web.HttpUnhandledException (0X80004005) : : 'System.Web.HttpUnhandledException'형식의 예외 발생했다 그러나 잠시 후, 나는 1과 같이 간헐적으로 예외를 통지하기 시작했다.

System.Data.SqlClient.SqlException (0x80131904) : 제한 시간이 만료되었습니다. 작업이 완료되기 전에 시간 초과 기간이 경과되었거나 서버가 응답하지 않습니다.

System.ComponentModel.Win32Exception은 (0X80004005) 대기 동작 System.Data.SqlClient.SqlInternalConnection.OnError (SQLEXCEPTION 예외 부울 breakConnection, 액션 1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
at System.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync()
at System.Data.SqlClient.TdsParserStateObject.TryReadNetworkPacket()
at System.Data.SqlClient.TdsParserStateObject.TryPrepareBuffer()
at System.Data.SqlClient.TdsParserStateObject.TryReadByte(Byte& value)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource
1 개 완료 INT32 제한 시간, 작업 & 태스크에

을 초과 부울 asyncWrite) WebMatrix.Data에서 System.Data.SqlClient.SqlCommand.ExecuteScalar에서 System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior를 cmdBehavior, RunBehavior runBehavior 부울 returnStream 문자열 법)
()
에서
. Database.QueryValue (String commandText, Obje CT [] 인수) WebMatrix.WebData.DatabaseWrapper.QueryValue (문자열의 CommandText에서
[] 파라미터 개체) WebMatrix.WebData.SimpleMembershipProvider.GetUserId (IDatabase의 dB의
문자열 userTableName 문자열 userNameColumn 문자열 userIdColumn 문자열의 userName) WebMatrix.WebData.SimpleMembershipProvider.GetUser (문자열 이름, 부울 userIsOnline)에서
System.Web.Security.Membership.GetUser (문자열 이름, 부울 userIsOnline)에서
WebMatrix.WebData.WebSecurity.GetUserId에서
(문자열의 userName)
(WebMatrix.WebData.WebSecurity.get_CurrentUserId())
(ASP._Page_Default_cshtml) <> e : \ web \ givetoru \ Default.cshtml의 c__DisplayClass5.b__3() : System.Web.WebPages.WebPageBase의 라인 118
. <> c__DisplayClassb.b__9 (해당 TextWriter TW)에 System.Web.WebPages.HelperResult.WriteTo
(TextWriter에서 라이터)에 System.Web.WebPages.WebPageBase.Write
(HelperResult 결과) ASP._Page__SiteLayout_cshtml.Execute에서
()에서 E : \ 웹 \ givetoru_SiteLayout.cshtml : System.Web.WebPages.WebPageBase.ExecutePageHierarchy에서 선 184
() System.Web.WebPages.WebPage.ExecutePageHierarchy (1 executors)
at System.Web.WebPages.WebPage.ExecutePageHierarchy()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
at System.Web.WebPages.WebPageBase.<>c__DisplayClass7.<RenderPageCore>b__6(TextWriter writer)
at System.Web.WebPages.HelperResult.WriteTo(TextWriter writer)
at System.Web.WebPages.WebPageBase.Write(HelperResult result)
at System.Web.WebPages.WebPageBase.RenderSurrounding(String partialViewName, Action
는 IEnumerable 1 본체) 시스템에서
에서
. Web.WebPages.WebPageBase.PopContext()
at System.Web.WebPageBase.ExecutePageHierarchy (WebPageContext pageContext, TextWr iter 작성자, WebPageRenderingBase startPage)
at System.WebPages.WebPageHttpHandler.ProcessRequestInternal (HttpContextBase으로 HttpContext)

ClientConnectionId : 4f57f963-05e1-4429-946b-504e59e13050
오류 번호 : 29, 상태 : 0, 등급 : System.Web.WebPages.WebPageHttpHandler.HandleError에서 11

(예외 E)에서 System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal
(HttpContextBase으로 HttpContext) System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal (HttpContext를 컨텍스트)에
System.Web.WebPages.WebPageHttpHandler.ProcessRequest에서
(HttpContext를 문맥)
System.Web.HttpApplication.ExecuteStep 때의 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
에서 15,(IExecutionStep 단계 부울 & completedSynchronously)

일부 파고를 수행 한 후, 그것은이 같은 WebMatrix.WebData.WebSecurity 클래스에 전화로 할 수있다 같습니다

WebSecurity.CurrentUserId 

사람이 문제가 발생할 수 있습니다 무엇에 대한 어떤 생각을 가지고 있습니까? 이러한 제한 시간을 막기 위해 내 DB에 특별한 조치를 취해야합니까? 참조

업데이트 20170303 922AM CT

(민감한 데이터가 편집 됨로) 여기

내 연결 문자열 : 여기

<add name="StarterSiteEntities" connectionString="metadata=res://*/App_Code.ProductModel.csdl|res://*/App_Code.ProductModel.ssdl|res://*/App_Code.ProductModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=tcp:*****;initial catalog=*****;integrated security=False;Connection Timeout=30;user id=*****;password=****;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

<add name="StarterSite" connectionString="Data Source=tcp:****;Initial Catalog=****;User ID=****;Password=*****;Integrated Security=False;Connection Timeout=30;" providerName= 
"System.Data.SqlClient" /> 

는 WebSecurity DB 연결을 초기화 내 _AppStart.cshtml 파일의 라인은 다음과 같습니다

WebSecurity.InitializeDatabaseConnection("StarterSite", "UserProfile", "UserId", "Email", autoCreateTables: false); 
+1

WebMatrix.WebData.WebSecurity는 SimpleMembershipProvider를 처리합니다. 기본적으로 이것은 일반 데이터 액세스 코드와 완전히 다른 연결 문자열을 사용할 수 있습니다. 따라서 사용중인 두 개의 다른 연결 문자열이 있는지 확인할 수 있습니다. 전체 SQL Server 데이터베이스로 마이그레이션 할 때 하나의 연결 문자열이 업데이트되지 않았을 수도 있습니다. –

+0

이것은 일반적인 타임 아웃 문제처럼 보입니다. SQL Server를 다시 시작하면 시간 초과 문제가 해결됩니까? 예. SQL Server를 한동안 실행 한 후에 만 ​​문제가 발생합니까? – Dean

답변

1

SQL Server의 일반적인 연결 문제처럼 보입니다. 응용 프로그램이 일반적으로 작동 할 때 일반 데이터 액세스 코드에 다른 연결 문자열을 사용하고 SimpleMembershipProvider이라는 인증을 사용하여 데이터베이스에서 인증 관련 데이터를 쿼리 할 때만 문제가 발생할 수 있다고 가정합니다.

질문 아래에있는 내 의견에 언급 된대로 WebMatrix.WebData.WebSecurity (예외가 발생한 곳)은 SimpleMembershipProvider으로 인증을 처리합니다. 이 경우 사용되는 연결 문자열은 일반적인 데이터 액세스 코드와는 완전히 다른 것일 수 있습니다 (예 : 엔티티 프레임 워크 DataContext.

그래서, 당신이 그것을 설명하는 방법은, 나는 당신이 SimpleMembershipProvider에 대한 두 개의 서로 다른 연결 문자열을 사용하는 가능성이 높다 생각하여 EF DataContext (또는 당신이 무엇을 데이터 액세스 요구에 사용할)과 SimpleMembershipProvider에 대한 어쩌면 하나 전체 SQL Server 데이터베이스로 마이그레이션 할 때 업데이트되지 않았습니다.

나는 이것이 적어도 올바른 방향으로 인도하기를 바랍니다. 그렇지 않으면 web.config 및 특히 전체 Membership 및 ConnectionString 구성을 공유하려고합니다.

당신이 게시 된 연결 문자열이 벌금과 동일한 것 : :)

이 업데이트하지만, 민감한 데이터를 게시하지 않도록합니다.귀하의 예외에서 한 비트를 놓쳤습니다 : Timeout expired라고 말하면서, 실제로 연결 시간 초과의 경우, Connection timeout expired (적어도 .NET Framework 4.5 이상, IIRC에서는)이라고 말할 것입니다.

따라서 쿼리 성능 문제가 발생할 수 있는지 확인해야합니다. StackTrace에 따라 쿼리 된 내용이므로 사용자 정의 사용자 테이블에 UserName에 대한 인덱스가 있습니까? 반면에 복잡한 조인이없는 사용자 테이블의 단일 쿼리가 인덱스가없는 경우에도 30 초 이상 실행될 수있는 것 같지는 않습니다. 하지만 때때로 데이터베이스 잠금을 실행하는 경우가 있습니다.

다음은 SQL Server Profiler를 데이터베이스에 연결하고 응용 프로그램에 위와 같은 예외가 나타날 때까지 실행하도록하는 것입니다. 그런 다음 프로파일 러에서이 시간에 실행 된 쿼리가 오래 실행되었는지 확인하십시오.

+0

사려 깊은 반응에 감사드립니다. 내 질문에 연결 문자열을 포함하도록 업데이트했습니다. –

+0

@TodBirdsall 방금 예외적으로 중요한 작은 부분을 놓친 것으로 나타났습니다. '제한 시간 만료'와 연결 제한 시간 인 경우 '연결 시간 초과가 만료되었습니다'라는 메시지가 표시됩니다. 현재 어떤 프레임 워크 버전이 오류 메시지에서이 구별을 추가했는지 기억하지 못합니다. .NET 4.5 이상입니까? 그렇다면 연결 시간 초과가 하나라고 말합니다. 따라서 느린 실행 쿼리 일 수 있습니다. 나는 대답을 업데이트했다. –

+0

업데이트 해 주셔서 감사합니다. 문제가 지속되면 프로파일 러에 시도해 보겠습니다. –