/// <summary>
        /// Chart의 Xml 정보를 HttpResponse 객체에 쓴다.
        /// </summary>
        /// <param name="dataXml">Chart의 Xml 정보</param>
        protected virtual void WriteDataXml(string dataXml)
        {
            if (IsDebugEnabled)
            {
                log.Debug(@"Chart 정보를 응답스트림에 쓰기 시작합니다. 응답할 Chart Xml=[{0}]", dataXml.EllipsisChar(1024));
            }

            Response.Clear();
            Response.ContentType = @"text/xml";
            Response.Expires     = -1;

            byte[] output = ArrayTool.Combine(StringTool.MultiBytesPrefixBytes, Response.ContentEncoding.GetBytes(dataXml));

            // 압축을 지원하고, 압축할 만큼 크기가 크다면...
            var needCompress = CanCompression && dataXml.Length > CompressionThreshold;

            if (needCompress)
            {
                // 압축했을 때에, 압축 방법을 응답헤더에 꼭 붙여줘야 Client에서 알아먹겠죠?
                Response.AppendHeader(@"Content-Encoding", CompressionKind.ToString().ToLower());
                output = Compressor.Compress(output);
            }

            Response.AppendHeader(@"Content-Length", output.Length.ToString());
            Response.OutputStream.Write(output, 0, output.Length);
            Response.Flush();

            if (IsDebugEnabled)
            {
                log.Debug(@"Chart 정보를 응답스트림에 쓰기를 완료했습니다!!!");
            }
        }
        /// <summary>
        /// 지정한 HttpContext에 리소스 파일을 씁니다.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="filename"></param>
        protected void WriteChartFile(HttpContext context, string filename)
        {
            if (IsDebugEnabled)
            {
                log.Debug(@"리소스에서 해당 파일 정보를 읽어 반환합니다... filename=" + filename);
            }

            filename.ShouldNotBeWhiteSpace("filename");


            var buffer = GetResourceFileContent(context, filename);

            Guard.Assert(buffer != null && buffer.Length > 0, "지정된 파일이 리소스에 없습니다. filename=" + filename);

            SetRepsonseHeaders(context, filename);

            // file이 swf 처럼 이미 압축이 되어 있다면, 추가로 압축을 할 필요 없다.
            //
            var needCompress = CanCompression &&
                               WebTool.NoCompressionFileExtensions.Any(filename.Contains) == false &&
                               buffer.Length > CompressionThreshold;

            if (needCompress)
            {
                if (IsDebugEnabled)
                {
                    log.Debug("리소스 파일[{0}] 를 압축하여, 반환합니다. 압축방법[{1}]", filename, CompressionKind);
                }

                // 압축했을 때에, 압축 방법을 응답헤더에 꼭 붙여줘야 Client에서 알아먹겠죠?
                context.Response.AppendHeader("Content-Encoding", CompressionKind.ToString().ToLower());
                buffer = Compressor.Compress(buffer);
            }

            context.Response.AppendHeader(@"Content-Length", buffer.Length.ToString());
            context.Response.OutputStream.Write(buffer, 0, buffer.Length);
            context.Response.Flush();

            if (IsDebugEnabled)
            {
                log.Debug(@"리소스 파일 내용을 Client에 전송했습니다!!! filename=" + filename);
            }
        }
Example #3
0
        private void SetResponseHeaders(HttpResponse response, CacheItem item, TimeSpan cacheDuration)
        {
            response.ShouldNotBeNull("response");

            response.AppendHeader("Content-Length", item.Data.Length.ToString());
            response.ContentType = item.ContentType;

            if (item.IsCompressed)
            {
                response.AppendHeader("Content-Encoding", CompressionKind.ToString().ToLower());
            }

            var cache = response.Cache;

            // NOTE : HTTPS 에서도 동작하기 위해
            cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
            cache.SetCacheability(HttpCacheability.Public);

            // Cache Expiration 설정
            cache.SetExpires(DateTime.Now.ToUniversalTime().Add(cacheDuration));
            cache.SetMaxAge(cacheDuration);
            cache.SetAllowResponseInBrowserHistory(true);
        }
Example #4
0
                /// <summary>
                /// Builds the execute stored procedure operation.
                /// </summary>
                /// <param name="streamName">Name of the stream.</param>
                /// <param name="configType">The serialization configuration type identifiers.</param>
                /// <param name="serializationKind">The <see cref="SerializationKind"/>.</param>
                /// <param name="serializationFormat">The <see cref="SerializationFormat"/>.</param>
                /// <param name="compressionKind">The <see cref="CompressionKind"/>.</param>
                /// <param name="unregisteredTypeEncounteredStrategy">The <see cref="UnregisteredTypeEncounteredStrategy"/>.</param>
                /// <returns>Operation to execute stored procedure.</returns>
                public static ExecuteStoredProcedureOp BuildExecuteStoredProcedureOp(
                    string streamName,
                    IdentifiedType configType,
                    SerializationKind serializationKind,
                    SerializationFormat serializationFormat,
                    CompressionKind compressionKind,
                    UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy)
                {
                    var sprocName = Invariant($"[{streamName}].[{nameof(GetIdAddIfNecessarySerializerRepresentation)}]");

                    var parameters = new List <ParameterDefinitionBase>()
                    {
                        new InputParameterDefinition <int>(nameof(InputParamName.ConfigTypeWithoutVersionId), Tables.TypeWithoutVersion.Id.SqlDataType, configType.IdWithoutVersion),
                        new InputParameterDefinition <int>(nameof(InputParamName.ConfigTypeWithVersionId), Tables.TypeWithVersion.Id.SqlDataType, configType.IdWithVersion),
                        new InputParameterDefinition <string>(nameof(InputParamName.SerializationKind), Tables.SerializerRepresentation.SerializationKind.SqlDataType, serializationKind.ToString()),
                        new InputParameterDefinition <string>(nameof(InputParamName.SerializationFormat), Tables.SerializerRepresentation.SerializationFormat.SqlDataType, serializationFormat.ToString()),
                        new InputParameterDefinition <string>(nameof(InputParamName.CompressionKind), Tables.SerializerRepresentation.CompressionKind.SqlDataType, compressionKind.ToString()),
                        new InputParameterDefinition <string>(nameof(InputParamName.UnregisteredTypeEncounteredStrategy), Tables.SerializerRepresentation.SerializationKind.SqlDataType, unregisteredTypeEncounteredStrategy.ToString()),
                        new OutputParameterDefinition <int>(nameof(OutputParamName.Id), Tables.SerializerRepresentation.Id.SqlDataType),
                    };

                    var result = new ExecuteStoredProcedureOp(sprocName, parameters);

                    return(result);
                }