2009-06-19 2 views
1

Я создал тестовую службу с методом, который содержит очень длинный цикл. Я надеялся, что когда произойдет транзакция таймаута, выполнение метода будет скрыто, но это не так. Клиент получает тайм-аут, но обработка продолжается на сервере.Как остановить вызов метода в 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);   
     } 
     } 
    } 

ответ

1

Я не думаю, что это возможно без изменения существующего кода.

Посмотрите here и here. Нить, обслуживающая запрос, полностью отделена от части WCF, которая доставляет результаты клиенту.

+0

Спасибо. для информации. – user80855

Смежные вопросы