/// <summary> /// HttpHandler의 작업의 메인 메소드입니다. 재정의 하여 원하는 기능을 수행하되, 제일 첫번째에 부모 클래스의 메소들를 호출해주어야 합니다. /// </summary> /// <param name="context"></param> protected override void DoProcessRequest(HttpContext context) { context.ShouldNotBeNull("context"); if(IsDebugEnabled) log.Debug(@"요청정보를 받아 처리를 시작합니다..."); try { var productName = context.Request[HttpParams.Product].AsText(); if(IsDebugEnabled) log.Debug("ProductName=[{0}]에 대한 요청 처리를 접수했습니다...", productName); var adapter = XmlDataTool.ResolveXmlDataManagerAdapter(productName); var responseBytes = adapter.Execute(context.Request.InputStream.ToBytes()); context.WriteResponse(responseBytes); if(IsDebugEnabled) log.Debug("ProductName=[{0}]에 대한 요청 처리를 완료하였습니다!!!", productName); } catch(Exception ex) { if(log.IsErrorEnabled) log.ErrorException("요청을 처리하는 동안 예외가 발생했습니다.", ex); } }
/// <summary> /// HttpHandler의 작업의 메인 메소드입니다. 재정의 하여 원하는 기능을 수행하되, 제일 첫번째에 부모 클래스의 메소들를 호출해주어야 합니다. /// </summary> /// <param name="context"></param> protected override void DoProcessRequest(HttpContext context) { context.ShouldNotBeNull("context"); if(IsDebugEnabled) log.Debug(@"Execution for request from HttpContext is starting..."); try { var productName = context.Request[HttpParams.Product].AsText(); if(IsDebugEnabled) log.Debug("ProductName=[{0}]에 대한 요청 처리를 접수했습니다...", productName); var adapter = DataServiceTool.ResolveDataServiceAdapter(productName); // Silverlight 때문에 요청/응답을 Base64 문자열로 받습니다. var responseText = adapter.Execute(context.Request.InputStream.ToText()); // var responseBytes = adapter.Execute(context.Request.InputStream.ToBytes()); context.WriteResponse(responseText); if(IsDebugEnabled) log.Debug("ProductName=[{0}]에 대한 요청 처리를 완료하였습니다!!!", productName); } catch(Exception ex) { if(log.IsErrorEnabled) log.Error("요청을 처리하는 동안 예외가 발생했습니다.", ex); } }
/// <summary> /// HttpHandler의 작업의 메인 메소드입니다. 재정의 하여 원하는 기능을 수행하되, 제일 첫번째에 부모 클래스의 메소들를 호출해주어야 합니다. /// </summary> /// <param name="context"></param> protected virtual void DoProcessRequest(HttpContext context) { context.ShouldNotBeNull("context"); _compressionKind = RetriveAvailableCompressionKind(context); if(IsDebugEnabled) log.Debug("Client가 수용할 수 있는 압축 방식=[{0}]", _compressionKind); }
/// <summary> /// Header 값을 추가한다. /// </summary> /// <param name="ctx">HttpContext</param> /// <param name="fileItem">클라이언트로 내려줄 파일 정보</param> /// <param name="attach">Content-Disposition의 Type<br/> /// false : inline<br/> /// true : attachment</param> public virtual void BuildHeader(HttpContext ctx, FileItem fileItem, bool attach) { if(IsDebugEnabled) log.Debug("==>S ctx={0}, fileItem={1}, attach={2}", ctx, fileItem, attach); ctx.ShouldNotBeNull("HttpContext가 없습니다."); fileItem.ShouldNotBeNull("파일정보가 없습니다."); ctx.Response.ContentType = fileItem.ContentType; ctx.Response.Expires = 0; AddHeader(ctx, fileItem, attach); }
/// <summary> /// 파일을 클라이언트에 내려준다. /// </summary> /// <param name="ctx">HttpContext</param> /// <param name="fileItem">파일정보</param> /// <param name="attach">파일 다운로드 방식</param> public virtual void Download(HttpContext ctx, FileItem fileItem, bool attach) { if(IsDebugEnabled) log.Debug("==>S ctx={0}, fileItem={1}, attach={2}", ctx, fileItem, attach); ctx.ShouldNotBeNull("HttpContext정보가 없습니다."); fileItem.ShouldNotBeNull("파일정보가 없습니다."); //if(Repository.FileExists(fileItem.ServerFileName) == false) // throw new FileNotFoundException("파일이 존재하지 않습니다.", fileItem.ToString()); BuildHeader(ctx, fileItem, attach); WriteFile(ctx, fileItem.ServerFileName); }
/// <summary> /// aspx, ashx의 <see cref="HttpContext"/>로부터 XdsRequestDocument를 만들고, /// 처리를 수행 한 후, XdsResponseDocument를 HttpContext의 Response.OutputStream에 Write를 수행합니다. /// </summary> /// <param name="context"></param> public static void Execute(HttpContext context) { context.ShouldNotBeNull("context"); if(IsDebugEnabled) log.Debug(@"Execution for request from HttpContext is starting..."); var request = context.Request; var productName = request.GetProductName(); var compress = request.GetUseCompress(); var security = request.GetUseSecurity(); var serializer = XmlDataServiceTool.GetSerializer(compress, security); XdsResponseDocument result = null; try { CheckProductExists(productName); Guard.Assert(request.TotalBytes > 0, "처리할 요청정보가 제공되지 않았습니다."); var requestBytes = request.InputStream.ToBytes(); var xdsRequest = ((byte[])serializer.Deserialize(requestBytes)).ConvertToXdsRequestDocument(); // var xdsRequest = XmlTool.Deserialize<XdsRequestDocument>(request.InputStream); result = Execute(xdsRequest, productName); } catch(Exception ex) { if(log.IsErrorEnabled) log.ErrorException("요청처리 중 예외가 발생했습니다.", ex); // 예외정보를 Client에게도 보낸다. result = result ?? new XdsResponseDocument(); result.ReportError(ex); } finally { if(result != null) WriteResponse(context.Response, result, serializer); } if(IsDebugEnabled) log.Debug("Execution for request from HttpContext is finished!!!"); }
/// <summary> /// HttpHandler의 작업의 메인 메소드입니다. 재정의 하여 원하는 기능을 수행하되, 제일 첫번째에 부모 클래스의 메소들를 호출해주어야 합니다. /// </summary> /// <param name="context"></param> protected override void DoProcessRequest(HttpContext context) { context.ShouldNotBeNull("context"); if(IsDebugEnabled) log.Debug(@"JSON TEXT 형식의 요청에 대해 작업 후, JSON TEXT 문자열로 반환합니다."); try { var productName = context.Request[HttpParams.Product].AsText(); var method = context.Request[HttpParams.Method].AsText(); var responseFormat = context.Request[HttpParams.ResponseFormat].AsEnum(ResponseFormatKind.ResultSet); if(IsDebugEnabled) log.Debug("ProductName=[{0}], Method=[{1}], ResponseFormat=[{2}] 에 대한 요청 처리를 접수했습니다...", productName, method, responseFormat); var requestMessage = new RequestMessage(); requestMessage.AddItem(method, responseFormat); var dataService = DataServiceTool.ResolveDataService(productName); var responseMessage = dataService.Execute(requestMessage); var responseText = JsonTool.SerializeAsText(responseMessage); var responseBytes = Compressor.Compress(responseText.ToBytes()); context.WriteResponse(responseBytes); //var response = context.Response; //response.OutputStream.Write(responseBytes, 0, responseBytes.Length); //response.OutputStream.Flush(); if(IsDebugEnabled) log.Debug("ProductName=[{0}], Method=[{1}]에 대한 요청 처리를 완료하였습니다!!!", productName, method); } catch(Exception ex) { if(log.IsErrorEnabled) log.Error("요청을 처리하는 동안 예외가 발생했습니다.", ex); } }