1
매우 긴 루프가 포함 된 메서드로 테스트 서비스를 만들었습니다. 시간 초과 트랜잭션이 발생하면 메소드 실행이 플러시되지만, 그렇지 않을 것으로 기대하고 있습니다. 클라이언트는 제한 시간을 갖지만 처리는 서버에서 계속됩니다.트랜잭션 시간 초과 후 WCF에서 메서드 호출의 예외 처리를 중지하는 방법
중단 할 수있는 방법이 있습니까? 메서드 코드를 변경하지 않고?
다음은 예입니다.이 예에서 큐 바인딩을 사용하는 QueueRequest 메서드를 호출하고 10 초 후 트랜잭션이 중단됩니다. 이 시점에서 재 시도가 발생하여 동일한 문제가 발생합니다. 몇 번의 재시도 후 서버는 메시지가 독 (poison) 인 경우에도 여러 스레드/인스턴스에서 루프를 실행하려고 100 % cpu 작업을 수행합니다.
// 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