private static XdsRequestDocument GetRequestDocument() { var requestDocument = new XdsRequestDocument(); requestDocument.Transaction = true; int reqId = requestDocument.AddStoredProc("SP_NAME", XmlDataResponseKind.DataSet); Assert.AreEqual(0, reqId); var request = requestDocument[reqId]; request.AddParamArray("ID", "NAME"); request.AddValue(1, "배성혁"); request.AddValue(2, "sunghyouk"); Assert.AreEqual(2, request.Values.Count); reqId = requestDocument.AddQuery("QUERY_NAME", XmlDataResponseKind.Scalar); var request2 = requestDocument[reqId]; request2.AddParamArray("NAME"); request2.AddValue("배성혁"); request2.AddValue("sunghyouk bae"); Assert.AreEqual(2, request2.Values.Count); request2.PreQueries.AddQuery("DELETE Employees where LastName='Bae'"); request2.PostQueries.AddQuery("DELETE Employees where LastName='Bae'"); Assert.AreEqual(1, request2.PreQueries.Count); Assert.AreEqual(1, request2.PostQueries.Count); return requestDocument; }
private static XdsRequestDocument GetRequestDocument() { var requestDocument = new XdsRequestDocument(); requestDocument.Transaction = true; int reqId = requestDocument.AddStoredProc("SP_NAME", XmlDataResponseKind.DataSet); Assert.AreEqual(0, reqId); var request = requestDocument[reqId]; request.AddParamArray("ID", "NAME"); request.AddValue(1, "배성혁"); request.AddValue(2, "sunghyouk"); Assert.AreEqual(2, request.Values.Count); reqId = requestDocument.AddQuery("QUERY_NAME", XmlDataResponseKind.Scalar); var request2 = requestDocument[reqId]; request2.AddParamArray("NAME"); request2.AddValue("배성혁"); request2.AddValue("sunghyouk bae"); Assert.AreEqual(2, request2.Values.Count); request2.PreQueries.AddQuery("DELETE Employees where LastName='Bae'"); request2.PostQueries.AddQuery("DELETE Employees where LastName='Bae'"); Assert.AreEqual(1, request2.PreQueries.Count); Assert.AreEqual(1, request2.PostQueries.Count); return(requestDocument); }
/// <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; }
public override XdsResponseDocument ExecuteXmlDataManager(XdsRequestDocument requestDocument) { var adapter = XmlDataTool.ResolveXmlDataManagerAdapter(ProductName); var requestBytes = adapter.RequestSerializer.Serialize(requestDocument); using(var xdsProxy = new XmlDataServiceClient()) { var responseBytes = xdsProxy.Execute(requestBytes, ProductName, false); return adapter.ResponseSerializer.Deserialize(responseBytes); } }
/// <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); }
public void VerifyXmlDataService(string scriptPath, XdsRequestDocument requestDocument, bool? compress, bool? security) { var serializer = GetSerializer(compress, security); var requestBytes = serializer.Serialize(requestDocument.ConvertToBytes()); // NOTE : SILVERLIGHT에서는 UploadDataAsync 메소드를 지원하지 않는다. Silverlight에서는 WebService나 WCF를 사용해야 한다. var webClient = new WebClient(); var responseBytes = webClient.UploadData(scriptPath, requestBytes); var xdsResponse = ((byte[])serializer.Deserialize(responseBytes)).ConvertToXdsResponseDocument(); Assert.IsNotNull(xdsResponse); Assert.IsFalse(xdsResponse.HasError); }
public void VerifyXmlDataServiceAsync(string scriptPath, XdsRequestDocument requestDocument, bool? compress, bool? security) { var serializer = GetSerializer(compress, security); var requestBytes = serializer.Serialize(requestDocument.ConvertToBytes()); var webClient = new WebClient(); var uploadTask = webClient.UploadDataTask(new Uri(scriptPath), "POST", requestBytes); uploadTask.Wait(); var responseBytes = uploadTask.Result; var xdsResponse = ((byte[])serializer.Deserialize(responseBytes)).ConvertToXdsResponseDocument(); Assert.IsNotNull(xdsResponse); Assert.IsFalse(xdsResponse.HasError); }
/// <summary> /// 비동기적으로 Web Service를 호출합니다. 비동기 호출을 동시다발적으로 호출 시 UserState로 각각의 호출을 구분할 수 있어야 한다. /// </summary> /// <param name="xdsRequest"></param> /// <param name="productName"></param> /// <param name="compress"></param> /// <param name="security"></param> private static void VerifyXmlDataServiceAsync(XdsRequestDocument xdsRequest, string productName, bool? compress, bool? security) { var serializer = GetSerializer(compress, security); var requestBytes = serializer.Serialize(xdsRequest.ConvertToBytes()); var xdsService = new XmlDataService(); var tcs = new TaskCompletionSource<byte[]>(null); if(security.GetValueOrDefault(false)) { ExecuteSecurityCompletedEventHandler handler = null; handler = (s, e) => EventAsyncPattern.HandleCompletion(tcs, e, () => e.Result, () => xdsService.ExecuteSecurityCompleted -= handler); xdsService.ExecuteSecurityCompleted += handler; try { xdsService.ExecuteSecurityAsync(requestBytes, productName, compress.GetValueOrDefault(false), tcs); } catch(Exception ex) { xdsService.ExecuteSecurityCompleted -= handler; tcs.TrySetException(ex); } } else { ExecuteCompletedEventHandler handler = null; handler = (s, e) => EventAsyncPattern.HandleCompletion(tcs, e, () => e.Result, () => xdsService.ExecuteCompleted -= handler); xdsService.ExecuteCompleted += handler; try { xdsService.ExecuteAsync(requestBytes, productName, compress.GetValueOrDefault(false), tcs); } catch(Exception ex) { xdsService.ExecuteCompleted -= handler; tcs.TrySetException(ex); } } tcs.Task.Wait(); Assert.IsTrue(tcs.Task.IsCompleted); var xdsResponse = ((byte[])serializer.Deserialize(tcs.Task.Result)).ConvertToXdsResponseDocument(); Assert.IsNotNull(xdsResponse); Assert.IsFalse(xdsResponse.HasError); Assert.IsTrue(xdsResponse.Responses.Count > 0); xdsService.Dispose(); }
/// <summary> /// Create a new instance of <see cref="XdsRequestDocument"/> from the specified xml string. /// </summary> /// <param name="xml">xml string</param> /// <returns>instance of <see cref="XdsRequestDocument"/></returns> public static XdsRequestDocument Load(string xml) { xml.ShouldNotBeWhiteSpace("xml"); if (IsDebugEnabled) { log.Debug("Build XdsRequestDocument with the specified xml string. xml=[{0}]", xml.EllipsisChar(80)); } XdsRequestDocument result = null; var data = xml.ToBytes(XmlTool.XmlEncoding); result = XmlTool.Deserialize <XdsRequestDocument>(data); return(result); }
/// <summary> /// 요청 정보를 병렬로 모두 수행합니다. /// </summary> protected override void ExecuteRequestCore(XdsRequestDocument requestDocument, XdsResponseDocument responseDocument) { if(requestDocument.IsParallelToolecute == false) { base.ExecuteRequestCore(requestDocument, responseDocument); return; } if(IsDebugEnabled) log.Debug(@"요청을 병렬방식으로 수행합니다..."); // 요청을 병렬로 처리합니다. requestDocument.Requests .AsParallel() .AsOrdered() .ForAll(request => DoProcessRequestItem(request, responseDocument)); if(IsDebugEnabled) log.Info(@"모든 요청을 병렬 수행으로 처리했습니다."); }
private static void VerifyXmlDataService(XdsRequestDocument xdsRequest, string productName, bool? compress, bool? security) { using(var xdsProxy = new XmlDataServiceClient()) { var serializer = GetSerializer(compress, security); var requestBytes = serializer.Serialize(xdsRequest.ConvertToBytes()); var responseBytes = security.GetValueOrDefault(false) ? xdsProxy.ExecuteSecurity(requestBytes, productName, compress.GetValueOrDefault(false)) : xdsProxy.Execute(requestBytes, productName, compress.GetValueOrDefault(false)); Assert.IsNotNull(responseBytes); var xdsResponse = ((byte[])serializer.Deserialize(responseBytes)).ConvertToXdsResponseDocument(); Assert.IsNotNull(xdsResponse); Assert.IsFalse(xdsResponse.HasError); Assert.IsTrue(xdsResponse.Responses.Count > 0); } }
/// <summary> /// Create a new instance of <see cref="XdsRequestDocument"/> from the specified file. /// </summary> /// <param name="filename">full file path</param> /// <returns>instance of <see cref="XdsRequestDocument"/></returns> public static XdsRequestDocument LoadFromFile(string filename) { if (IsDebugEnabled) { log.Debug("Load from file to build request document. filename=[{0}]", filename); } if (File.Exists(filename) == false) { throw new FileNotFoundException("File not found.", filename); } XdsRequestDocument result = null; using (var stream = FileTool.GetBufferedFileStream(filename, FileOpenMode.Read)) { result = XmlTool.Deserialize <XdsRequestDocument>(stream); } if (IsDebugEnabled) { log.Debug("Load from file and build XdsRequestDocument is finished."); } return(result); }
public override XdsResponseDocument ExecuteXmlDataManager(XdsRequestDocument requestDocument) { var responseXml = XmlHttpTool.PostXml(ScriptPath, requestDocument.ToXmlDocument(XmlTool.XmlEncoding)); return XmlTool.Deserialize<XdsResponseDocument>(responseXml); }
private static void VerifyXmlDataServiceAsync(XdsRequestDocument xdsRequest, string productName, bool? compress, bool? security) { var waitHandle = new AutoResetEvent(false); var serializer = GetSerializer(compress, security); var requestBytes = serializer.Serialize(xdsRequest.ConvertToBytes()); var proxy = new XmlDataServiceClient(); if(security.GetValueOrDefault(false)) { // IAsyncResult를 반환받아서 필요할 때 기다리게 할 수도 있지만, 테스트를 위해 Synchronous하게 동작하게 한다. proxy.BeginExecuteSecurity(requestBytes, productName, compress.GetValueOrDefault(false), (ar) => { var proxy2 = (XmlDataServiceClient)ar.AsyncState; var responseBytes = proxy2.EndExecuteSecurity(ar); var xdsResponse = ((byte[])serializer.Deserialize(responseBytes)).ConvertToXdsResponseDocument(); Assert.IsNotNull(xdsResponse); Assert.IsFalse(xdsResponse.HasError); Assert.IsTrue(xdsResponse.Responses.Count > 0); proxy2.Close(); }, proxy); } else { // IAsyncResult를 반환받아서 필요할 때 기다리게 할 수도 있지만, 테스트를 위해 Synchronous하게 동작하게 한다. proxy.BeginExecute(requestBytes, productName, compress.GetValueOrDefault(false), (ar) => { var proxy2 = (XmlDataServiceClient)ar.AsyncState; var responseBytes = proxy2.EndExecute(ar); var xdsResponse = ((byte[])serializer.Deserialize(responseBytes)).ConvertToXdsResponseDocument(); Assert.IsNotNull(xdsResponse); Assert.IsFalse(xdsResponse.HasError); Assert.IsTrue(xdsResponse.Responses.Count > 0); proxy2.Close(); }, proxy); } }
public override XdsResponseDocument ExecuteXmlDataManager(XdsRequestDocument requestDocument) { using(var xdsService = new XmlDataService()) { var adapter = XmlDataTool.ResolveXmlDataManagerAdapter(ProductName); var tcs = new TaskCompletionSource<byte[]>(null); ExecuteCompletedEventHandler handler = null; handler = (s, e) => EventAsyncPattern.HandleCompletion(tcs, e, () => e.Result, () => xdsService.ExecuteCompleted -= handler); xdsService.ExecuteCompleted += handler; try { var requestBytes = adapter.RequestSerializer.Serialize(requestDocument); xdsService.ExecuteAsync(requestBytes, ProductName, false, tcs); } catch(Exception ex) { xdsService.ExecuteCompleted -= handler; tcs.TrySetException(ex); } tcs.Task.Wait(); Assert.IsTrue(tcs.Task.IsCompleted); return adapter.ResponseSerializer.Deserialize(tcs.Task.Result); } }
/// <summary> /// 요청정보를 실행하여 응답정보를 반환합니다. /// </summary> /// <param name="requestDocument">요청정보</param> /// <returns>요청 처리 응답정보</returns> public virtual XdsResponseDocument Execute(XdsRequestDocument requestDocument) { return Execute(requestDocument, 90); }
/// <summary> /// 요청에 대한 실제 작업을 수행합니다. /// </summary> protected virtual void ExecuteRequestCore(XdsRequestDocument requestDocument, XdsResponseDocument responseDocument) { if(IsDebugEnabled) log.Debug("요청 정보를 옵션에 따라 동기적으로 실행합니다..."); foreach(var request in requestDocument.Requests) { // 메소드인 경우는 QueryProvider를 이용하여, 실제 Query 문장으로 변경한다. // XmlDataTool.ConvertToQuery(Ado, request); ExecuteSimpleQuery(Ado, request.PreQueries); //! 실제 수행 DoProcessRequestItem(request, responseDocument); ExecuteSimpleQuery(Ado, request.PostQueries); } }
public virtual XdsResponseDocument ExecuteXmlDataManager(XdsRequestDocument requestDocument) { return XmlDataTool.ResolveXmlDataManager().Execute(requestDocument); }