使用OdbcDataReader.ExecuteReader()时出现ThreadAbortException异常

4
我正在使用OdbcDataReader类和ExecuteReader()方法对一个主机DB2数据库运行SQL查询。这段代码已经在生产中运行了几个月,并且一直运行得很好。
通常情况下,这个查询需要1-2分钟才能执行完毕。但是上周五,查询遇到了ThreadAbortException异常。下面是格式化后的堆栈跟踪信息。堆栈跟踪中的ApplicationException是在我的catch块中创建的。
如果有必要,可以注意到,当客户端调用Web服务方法时,会运行此查询。Web服务是在Windows服务中托管的,使用soap.tcp协议托管Web服务。
有什么想法关于为什么会发生TreadAbortException异常吗?
2个回答

4

以下是我自己问题的答案。

在托管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,但在您的情况下似乎不是这种情况。)


感谢您的回复。正如问题中所提到的,该线程正在运行在一个托管于Windows服务中的Web服务中。这有点奇怪,但确实如此。 - Dean Hill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接