/// <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);
            }
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #4
0
        /// <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);
        }
Beispiel #5
0
        /// <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);
            }
        }