/// <summary> /// 요청 정보중에 응답정보로 다시 보내기 위해서 헤더 정보를 복사한다. /// </summary> /// <param name="requestDocument">요청문서</param> /// <param name="responseDocument">응답문서</param> public static void CopyRequestHeader(this XdsRequestDocument requestDocument, XdsResponseDocument responseDocument) { requestDocument.ShouldNotBeNull("requestDocument"); responseDocument.ShouldNotBeNull("responseDocument"); responseDocument.ConnectionString = requestDocument.ConnectionString; responseDocument.Transaction = requestDocument.Transaction; responseDocument.IsolationLevel = requestDocument.IsolationLevel; }
/// <summary> /// 요청정보를 받은 해당 Database에서 작업하고, 결과를 반환한다. /// </summary> /// <param name="requestDocument">요청문서</param> /// <param name="dbName">요청을 실행할 Database connectionString name</param> /// <returns>응답문서</returns> public static XdsResponseDocument Execute(this XdsRequestDocument requestDocument, string dbName) { requestDocument.ShouldNotBeNull("requestDocument"); if (IsDebugEnabled) { log.Debug("요청문서에 대한 실행을 수행합니다... dbName=[{0}]", dbName); } return(ResolveXmlDataManager(dbName).Execute(requestDocument)); }
/// <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)); }
/// <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); }