squ*_*man 6 c# deployment timeout winforms
我有一个C#winforms应用程序,其中包含以下相关项:
我已经在我的机器上安装了部署的副本(通过ClickOnce),并且通过VS2010调试器并排运行另一个副本.它是相同的代码库.我昨天刚刚发布,自发布以来没有更改任何代码.
在同一台计算机上(同时并行运行),指向同一个SQL Server实例,我的应用程序的部署副本超时尝试写入数据库.通过调试器启动的副本写得很好.这是可重复的,每一次.
在现实世界中,只有几个人报告超时.他们在同一个部门,就在建筑物的同一个地方.他们是唯一的(好吧,我知道).我正在使用相同的SQL实例来调试它们正在使用的.
所有文件(.pdb除外)都包含在解决方案中所有项目的部署中.
这是外部异常的堆栈跟踪(我还没有任何内部异常):
Stack Trace:
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
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)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
at NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd)
at NHibernate.Loader.Loader.GetResultSet(IDbCommand st, Boolean autoDiscoverTypes, Boolean callable, RowSelection selection, ISessionImplementor session)
at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters)
Run Code Online (Sandbox Code Playgroud)
什么可能导致一个但不是另一个超时?在同一台机器上,同时运行(甚至一个接一个地运行).我甚至从build\bin \文件夹本地运行它没有超时,就像通过调试器一样.它只是生成超时的已部署副本.
更新:
我已经能够为生产环境捕获SQL事件探查器跟踪,除了对数据库的实际写入之外,一切都进入SQL,这在后台线程上确实发生.执行保存的方法(可以包含INSERTS和/或UPDATES的组合)将被调用,因为我在跟踪中看到该方法中的查询在保存完成之前运行.我正在努力捕获整个异常堆栈.
更新2:
我最终在调试器中重现了错误并隔离了引发异常的位置.上面提到的在保存之前发生的查询导致超时.这很好,现在我可以解决这个问题并继续前进.
但问题仍然存在:为什么它会在运行发布代码的进程中抛出,而不是在运行完全相同代码库的调试进程中抛出.
归档时间: |
|
查看次数: |
1951 次 |
最近记录: |