Вот ответ на мой вопрос.
При размещении веб-службы существует некоторый процесс, отслеживающий, сколько времени занимает вызов веб-службы. Если вызов занимает слишком много времени, он прерывается и возникает исключение ThreadAbortException. Время ожидания может быть увеличено.
Для веб-службы WSE3, работающей вне ASP.NET, например размещается как soap.tcp (как и у меня), свойство конфигурации имеет значение executeTimeoutInSeconds:
<configuration>
<microsoft.web.services3>
<messaging>
<executionTimeoutInSeconds value="360" />
</messaging>
</microsoft.web.services3>
</configuration>
Для веб-службы, размещенной в ASP.NET, свойство конфигурации имеет значение executeTimeout:
<configuration>
<system.web>
<httpRuntime executionTimeout=”360” />
</system.web>
</configuration