Я создал тестовую службу с методом, который содержит очень длинный цикл. Я надеялся, что когда произойдет транзакция таймаута, выполнение метода будет скрыто, но это не так. Клиент получает тайм-аут, но обработка продолжается на сервере.Как остановить вызов метода в WCF после таймаута транзакции
Есть ли способ остановить его? Без изменения кода метода?
Вот пример: в примере я вызываю метод QueueRequest, используя привязку очереди, и через 10 секунд транзакция прерывается. На этом этапе возникает повторная попытка, вызывающая ту же проблему. После нескольких попыток сервер выполняет 100% -ную работу процессора, пытаясь запустить цикл на нескольких потоках/экземплярах, даже если сообщение является ядом и сброшено.
// NOTE: If you change the class name "Service1" here, you must also update the reference to "Service1" in App.config.
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall,
TransactionTimeout="00:00:10",
ReleaseServiceInstanceOnTransactionComplete=true)]
[ErrorHandlingBehaviorAttribute]
public class Service1 : IQueueService
{
public Service1()
{
Trace.WriteLine("Creating an instance on thread " + Thread.CurrentThread.ManagedThreadId.ToString());
}
~Service1()
{
Trace.WriteLine("Destroying an instance on thread " + Thread.CurrentThread.ManagedThreadId.ToString());
}
[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
public void QueueRequest(string message)
{
int id = Thread.CurrentThread.ManagedThreadId;
Trace.WriteLine("Got Message on thread " + id.ToString());
for (int i = 0; i < 1000000; i++)
{
Trace.WriteLine("Processing " + i.ToString() + " Thread ID " + id.ToString());
Thread.Sleep(1000);
}
}
}
Спасибо. для информации. – user80855