Ejemplo n.º 1
0
        /// <summary>
        /// 요청정보를 실행하여 응답정보를 반환합니다.
        /// </summary>
        /// <param name="requestDocument">요청정보</param>
        /// <param name="commandTimeout">요청 처리 제한 시간 (단위 : seconds, 기본값 : 90)</param>
        /// <returns>요청 처리 응답정보</returns>
        public virtual XdsResponseDocument Execute(XdsRequestDocument requestDocument, int? commandTimeout) {
            if(IsDebugEnabled)
                log.Debug("요청정보에 따른 Database 작업을 시작합니다...");

            requestDocument.ShouldNotBeNull("requestDocument");

            if(requestDocument == null)
                return XmlDataTool.CreateResponseWithError(new InvalidOperationException(MsgConsts.NoRequestProvided));

            var responseDocument = new XdsResponseDocument();
            TransactionScope txScope = null;

            try {
                if(IsDebugEnabled)
                    log.Debug("요청문서 분석 및 응답문서를 초기화 합니다.");

                requestDocument.CopyRequestHeader(responseDocument);

                if(requestDocument.CommandTimeout > commandTimeout.GetValueOrDefault(90))
                    commandTimeout = requestDocument.CommandTimeout;

                if(requestDocument.Transaction) {
                    if(IsDebugEnabled)
                        log.Debug("요청문서에 Transaction 적용 옵션이 설정되어 있습니다. TransactionScope를 이용하여, 전체 요청을 Transaction 하에서 실행합니다.");

                    txScope = AdoTool.CreateTransactionScope(TransactionScopeOption.Required, IsolationLevel.ReadCommitted);
                }

                //! 실제 요청 처리
                ExecuteRequestCore(requestDocument, responseDocument);


                // Transaction을 Commit 한다
                // 
                if(txScope != null) {
                    if(IsDebugEnabled)
                        log.Debug("Transaction Commit을 시작합니다...");

                    txScope.Complete();

                    if(IsDebugEnabled)
                        log.Debug("Transaction Commit에 성공했습니다.!!!");
                }
            }
            catch(Exception ex) {
                responseDocument.ReportError(ex);
            }
            finally {
                if(txScope != null)
                    txScope.Dispose();
            }

            if(IsDebugEnabled)
                log.Debug("모든 요청을 처리하고, ResponseDocument를 반환합니다.");

            return responseDocument;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 해당 제품 DB에 대해 요청정보를 처리한 후 결과를 반환합니다.
        /// </summary>
        /// <param name="xdsRequest"></param>
        /// <param name="productName"></param>
        /// <returns></returns>
        public static XdsResponseDocument Execute(XdsRequestDocument xdsRequest, string productName) {
            xdsRequest.ShouldNotBeNull("xdsRequest");

            if(productName.IsWhiteSpace())
                productName = AdoTool.DefaultDatabaseName;

            CheckProductExists(productName);
            return XmlDataTool.Execute(xdsRequest, productName);
        }