소프트웨어/C# & ASP.NET

WCF Tip : Transaction 처리 주의사항

falconer 2009. 7. 15. 09:07

WCF에서 TransactionAutoComplete는 기본 true 입니다.

아래와 같이 직접적으로 complete(), rollback()을 하지 말고 사용 하세요.

개념은 기존에 COM+나 웹서비스에서 사용 하시던 방법 개념과 비슷합니다.

코드를 잘 살펴 보세요~

 

[OperationBehavior(TransactionScopeRequired=true)]
        public void BadTransaction()
        {
            try
            {
                //  작업 코드   ...
                OperationContext.Current.SetTransactionComplete();
            }
            catch (Exception ex)
            {
                //  예외 로깅한후 예외를 반드시 던진다.
                Transaction.Current.Rollback();         //  (X)
               
            }
        }

        [OperationBehavior(TransactionScopeRequired = true)]
        public void GoodTransaction()
        {
            try
            {
                //  작업 코드   ...
            }
            catch (Exception ex)
            {
                //  예외 로깅한후 예외를 반드시 던진다. (에러에 대한 로그 처리 등...)
                throw ex;            //  (O) 가급적 이방법으로...
            }
        }


        [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete=false)]
        public void OtherTransaction()
        {
            try
            {
                //  작업 코드   ...
                OperationContext.Current.SetTransactionComplete();
            }
            catch (Exception ex)
            {
                //  예외 로깅한후 예외 다시 호출
                throw ex;            //  (O)
            }
        }


출처 : http://www.ensimple.net/enSimple/show.aspx?cnum=648&b_id=study_netfr3&page=1