public void VerifyResponseMessage(ResponseMessage responseMsg) { responseMsg.Should().Not.Be.Null(); responseMsg.HasError.Should().Be.False(); responseMsg.CreatedUtcTime.HasValue.Should().Be.True(); responseMsg.Items.All(item => item.ExecutionTime.HasValue).Should("ExecutionTime.HasValue").Be.True(); }
/// <summary> /// DATA 처리를 위한 요청정보를 처리해서, 응답정보를 빌드해서 반환합니다. /// </summary> /// <param name="requestMessage">요청 메시지</param> /// <returns>응답 메시지</returns> public virtual ResponseMessage Execute(RequestMessage requestMessage) { var responseMsg = new ResponseMessage(); if(IsDebugEnabled) log.Debug("요청정보에 따른 작업을 시작합니다..."); if(requestMessage == null) { if(log.IsWarnEnabled) log.Warn("요청 정보가 NULL입니다."); responseMsg.Errors.Add(new ErrorMessage { Code = 0, Message = DataServiceTool.NoRequestProvided }); return responseMsg; } TransactionScope txScope = null; try { // 1. 사전 작업 // responseMsg.MessageId = requestMessage.MessageId; if(requestMessage.Transactional) { if(IsDebugEnabled) log.Debug("요청작업이 Transaction을 필요로 하여, Transaction을 시작합니다..."); txScope = AdoTool.CreateTransactionScope(TransactionScopeOption.Required, IsolationLevel.ReadCommitted); } // // 2. 본 작업 // ExecuteInternal(requestMessage, responseMsg); // 3. 사후 작업 // if(txScope != null) { txScope.Complete(); if(IsDebugEnabled) log.Debug("요청작업의 Transaction을 Commit 했습니다."); } } catch(Exception ex) { responseMsg.AddError(ex); if(log.IsErrorEnabled) log.Error("요청정보에 따른 작업처리 중 예외가 발생했습니다.", ex); if(txScope != null) txScope.Dispose(); } if(IsDebugEnabled) log.Debug("요청정보에 따른 작업을 완료했습니다!!! Request MessageId=[{0}], Response MessageId=[{1}]", requestMessage.MessageId, responseMsg.MessageId); return responseMsg; }
protected override void DoProcessRequestItems(RequestMessage requestMessage, ResponseMessage responseMessage) { // 요청작업이 병렬로 처리해서는 안될 경우를 대비 // if(requestMessage.AsParallel == false) { base.DoProcessRequestItems(requestMessage, responseMessage); return; } if(IsDebugEnabled) log.Debug("요청 항목들을 병렬로 처리합니다..."); // 병렬로 작업을 처리하고, 응답메시지에 추가합니다. requestMessage.Items .AsParallel() .AsOrdered() .ForAll(requestItem => { var responseItem = DoProcessRequestItem(requestItem); responseMessage.Items.Add(responseItem); }); }
/// <summary> /// 지정된 예외정보를 포함하는 응답메시지를 빌드합니다. /// </summary> /// <param name="exceptions"></param> /// <returns></returns> public static ResponseMessage CreateResponseMessageWithException(params Exception[] exceptions) { var responseMsg = new ResponseMessage(); foreach(var ex in exceptions) responseMsg.AddError(ex); return responseMsg; }
protected virtual void DoProcessRequestItems(RequestMessage requestMessage, ResponseMessage responseMessage) { // 3. 요청 항목별로 작업 처리 foreach(var requestItem in requestMessage.Items) { var responseItem = DoProcessRequestItem(requestItem); responseMessage.Items.Add(responseItem); } }
protected virtual void ExecuteInternal(RequestMessage requestMessage, ResponseMessage responseMessage) { if(IsDebugEnabled) log.Debug("요청 항목 순서대로 작업을 처리합니다."); // 1. 요청 메소드의 실제 Query 문을 매핑합니다. DataServiceTool.LoadQueryStatements(this, requestMessage); // 2. 요청 메시지 전체에 대한 사전 작업 수행 ExecuteQueries(requestMessage.PreQueries); // 3. 요청 항목별로 작업 처리 DoProcessRequestItems(requestMessage, responseMessage); // 4. 요청 메시지 전체에 대한 사후 작업 수행 ExecuteQueries(requestMessage.PostQueries); }
protected virtual void AssertResponseMessage(ResponseMessage responseMsg) { if(responseMsg.HasError) if(log.IsErrorEnabled) log.Error(responseMsg.Errors.CollectionToString()); Assert.IsFalse(responseMsg.HasError, responseMsg.Errors.CollectionToString()); Assert.IsTrue(responseMsg.Items.Count > 0); responseMsg.Items.All(item => item.ResultSet.Count > 0).Should().Be.True(); }