2008-11-17 20 views
3

我正在使用OdbcDataReader类和ExecuteReader()方法对大型机DB2数据库运行SQL查询。此代码正在生产中,并且已运行良好数月。ThreadAbortException调用OdbcDataReader.ExecuteReader()

查询通常需要1-2分钟才能执行。上个星期五,查询遇到了ThreadAbortException。以下是格式化的堆栈跟踪。跟踪中的ApplicationException在我的catch块中创建。

万一它很重要,查询在客户端调用Web服务方法时运行。 Web服务托管在Windows服务中。 Web服务使用soap.tcp协议托管在Windows服务中。

任何想法为什么TreadAbortException发生?

2个异常的堆栈跟踪。根目录 导致在顶部。

异常2:线程正在中止。
System.Threading.ThreadAbortException 内部 C:\ Windows \组件\ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089 \ System.Data.dll中 在 System.Data.Common.UnsafeNativeMethods.SQLExecDirectW(OdbcStatementHandle StatementHandle,串StatementText, 的Int32正文长度)在 System.Data.Odbc.OdbcStatementHandle.ExecuteDirect(串 CommandText中)在 System.Data.Odbc.OdbcCommand.ExecuteReaderObject(的CommandBehavior 行为,串方法,布尔 needReader,对象[] methodArguments , SQL_API odbcApiMethod)at System.Data.Odbc.OdbcCom mand.ExecuteReaderObject(的CommandBehavior 行为,字符串方法,布尔 needReader)在 System.Data.Odbc.OdbcCommand.ExecuteReader(的CommandBehavior 行为)在 MyCompany.MyDatabase.GetFolioList(字符串 sqlWhereClause)

异常1:无法检索摘要列表,其中STAT_CD ='V'。
System.ApplicationException内部 d:\生产\ DBGateway \ BIN \ MyDatabase.dll 在 MyCompany.MyDatabase.GetFolioList(字符串 sqlWhereClause)在 MyCompany.MyDatabase。 <> c__DisplayClass18.b__17() 在 MyCompany.WebUtilities.WebServiceBase.WebMethodTemplate [T](字符串 方法名,字符串exceptionFormat, WebMethodWorker 1 Worker, StringFormatter 1 FormatterMethod)

回答

3

这是我自己问题的答案。

托管Web服务时,有一些进程监视Web服务调用的时间。如果调用时间过长,则会被终止并发生ThreadAbortException。超时可以增加。

对于在ASP.NET之外运行的WSE3 Web服务,例如作为托管soap.tcp(像我),配置属性是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 
0

这可能是可能的,你的线程被选为受害者处于由乐观锁定导致的死锁状态,尽管在这种情况下,我会预期责任层处理它。

ThreadAbortExceptions可能由很多事情引起,包括其他应用程序或CLR主机中止线程。您的代码是否由另一个应用程序托管? (这个开创性的例子应该是Sql Server,尽管在你的情况下看起来并不是这样。)

+0

感谢您的答复。正如问题所述,该线程正在Windows服务中托管的Web服务中运行。有点奇怪,但确实如此。 – 2008-11-17 21:07:54

相关问题