我正在使用DB2类和ExecuteReader()方法对大型机OdbcDataReader数据库运行一个SQL查询。此代码正在制作中,几个月来一直运行良好。
查询通常需要1-2分钟才能执行。上周五,查询遇到了一个ThreadAbortException。下面是格式化的堆栈跟踪。跟踪中的ApplicationException是在catch块中创建的。
如果这很重要,则在客户端调用web服务方法时运行查询。web服务托管在Windows服务中。web服务使用soap.tcp协议托管在Windows中。
知道为什么TreadAbortException会发生吗?
两个异常的
堆栈跟踪。根本原因在顶端。
异常2:线程被中止。
( C:\WINDOWS\assembly\GAC_64\System.Data\2.0.0.0__b77a5c561934e089\System.Data.dll at System.Threading.ThreadAbortException at System.Data.Common.UnsafeNativeMethods.SQLExecDirectW(OdbcStatementHandle StatementHandle,String StatementText,Int32 TextLength) at System.Data.Odbc.OdbcStatementHandle.ExecuteDirect(String commandText)在System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior行为,String方法,布尔needReader,Object[] methodArguments,( System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior SQL_API odbcApiMethod)在MyCompany.MyDatabase.GetFolioList(String sqlWhereClause) ( String SqlWhereClause)
异常1:无法检索folio摘要列表,其中STAT_CD='V‘。
MyCompany.MyDatabase.<>c__DisplayClass18.b__17() at MyCompany.WebUtilities.WebServiceBase.WebMethodTemplateT的System.ApplicationException at D:\Production\DBGateway\bin\MyDatabase.dll at MyCompany.MyDatabase.GetFolioList(String sqlWhereClause)
发布于 2009-01-07 21:32:44
这是我自己问题的答案。
当托管web服务时,会有一些进程监视web服务调用所用的时间。如果调用花费的时间太长,那么它将被终止,并将发生ThreadAbortException。超时时间可以增加。
对于运行在ASP.NET之外的ASP.NET web服务(例如,托管为soap.tcp (与as )一样),配置属性为executionTimeoutInSeconds:
<configuration>
<microsoft.web.services3>
<messaging>
<executionTimeoutInSeconds value="360" />
</messaging>
</microsoft.web.services3>
</configuration>对于托管在ASP.NET中的web服务,配置属性为executionTimeout:
<configuration>
<system.web>
<httpRuntime executionTimeout=”360” />
</system.web>
</configuration发布于 2008-11-17 20:45:04
在乐观锁定导致的死锁情况下,您的线程可能被选择为牺牲品,尽管在这种情况下,我希望负责层来处理它。
ThreadAbortExceptions可能是由许多原因引起的,包括其他应用程序或中断线程的CLR主机。您的代码是否由其他应用程序承载?(最初的示例将是Server,但在您的情况下似乎并非如此。)
https://stackoverflow.com/questions/296781
复制相似问题