【发布时间】:2017-03-04 08:47:25
【问题描述】:
我们有一个使用 ASP.Net 网页构建的网站
我最近将数据库从 SQL Server CE 迁移到 SQL Server 2014。我使用本地计算机上的 SQL Server Compact Toolbox 执行此操作,然后将 .mdf 文件附加到我们的网站主机 SQL Server 实例。
一切都很好,网站似乎运行良好。然而,不久之后,我开始注意到像这样的间歇性异常:
System.Web.HttpUnhandledException (0x80004005):引发了“System.Web.HttpUnhandledException”类型的异常。
System.Data.SqlClient.SqlException (0x80131904):超时。在操作完成之前超时时间已过或服务器没有响应。
System.ComponentModel.Win32Exception (0x80004005):等待操作超时
在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔 breakConnection,Action
1 wrapCloseInAction)1 完成,Int32 超时,Task& 任务,布尔 asyncWrite)
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
在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔 returnStream,字符串方法)
在 System.Data.SqlClient.SqlCommand.ExecuteScalar()
在 WebMatrix.Data.Database.QueryValue(String commandText, Object[] args)
在 WebMatrix.WebData.DatabaseWrapper.QueryValue(String commandText, Object[] 参数)
在 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(字符串用户名)
在 WebMatrix.WebData.WebSecurity.get_CurrentUserId()
在 ASP._Page_Default_cshtml.c__DisplayClass5.b__3() 在 e:\web\givetoru\Default.cshtml:line 118
在 System.Web.WebPages.WebPageBase.c__DisplayClassb.b__9(TextWriter tw)
在 System.Web.WebPages.HelperResult.WriteTo(TextWriter writer)
在 System.Web.WebPages.WebPageBase.Write(HelperResult 结果)
在 e:\web\givetoru_SiteLayout.cshtml:line 184 中的 ASP._Page__SiteLayout_cshtml.Execute()
在 System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
在 System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable1 executors)1 正文)
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
在 System.Web.WebPages.WebPageBase.PopContext()
在 System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext,TextWriter writer,WebPageRenderingBase startPage)
在 System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContextBase httpContext)ClientConnectionId:4f57f963-05e1-4429-946b-504e59e13050
错误号:-2,状态:0,类:11在 System.Web.WebPages.WebPageHttpHandler.HandleError(Exception e)
在 System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContextBase httpContext)
在 System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContext 上下文)
在 System.Web.WebPages.WebPageHttpHandler.ProcessRequest(HttpContext 上下文)
在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
在进行了一些挖掘之后,看起来它可能与像这样对 WebMatrix.WebData.WebSecurity 类的调用有关:
WebSecurity.CurrentUserId
有人对可能导致此问题的原因有任何想法吗?我需要对我的数据库做一些特殊的事情来防止这些超时吗?
更新 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="data source=tcp:*****;initial catalog=*****;integrated security=False;Connection Timeout=30;user id=*****;password=****;MultipleActiveResultSets=True;App=EntityFramework"" 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" />
这是我的 _AppStart.cshtml 文件中初始化 WebSecurity DB 连接的行:
WebSecurity.InitializeDatabaseConnection("StarterSite", "UserProfile", "UserId", "Email", autoCreateTables: false);
【问题讨论】:
-
只是一个快速的想法:WebMatrix.WebData.WebSecurity 处理 SimpleMembershipProvider。默认情况下,这可以使用与常规数据访问代码完全不同的连接字符串。因此,您可以检查是否有两个不同的连接字符串在使用中,并且在迁移到完整的 SQL Server 数据库时可能没有更新一个。
-
这看起来像是一般的超时问题。如果重新启动 SQL Server,超时问题会消失吗? IE。是否只有在 SQL Server 运行一段时间后才会出现此问题?
标签: c# asp.net sql-server sql-server-ce asp.net-webpages