/// <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); } }
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); }
/// <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); }