/// <summary> /// WEB 视图服务 /// </summary> protected ViewServer() : base() { (NullAjaxResponse = AutoCSer.Net.Http.Response.New()).SetJsContentType(this); NullAjaxResponse.SetBody(); (NullAjaxResponseStaticFile = AutoCSer.Net.Http.Response.New()).SetJsContentType(this); NullAjaxResponseStaticFile.CacheControl = AutoCSer.Net.Http.Response.StaticFileCacheControl; NullAjaxResponseStaticFile.SetBody(); WebClientLog = webClientLog ?? AutoCSer.LogHelper.Default; }
/// <summary> /// 输出结束 /// </summary> /// <param name="response">HTTP响应输出</param> /// <returns>是否操作成功</returns> internal unsafe bool SocketResponse(ref AutoCSer.Net.Http.Response response) { long identity = SocketIdentity; AutoCSer.Net.Http.SocketBase socket = Socket; try { AutoCSer.Net.Http.Header header = socket.HttpHeader; AutoCSer.Net.Http.HeaderFlag flag = header.Flag; if ((flag & AutoCSer.Net.Http.HeaderFlag.IsVersion) != 0 && (flag & Net.Http.HeaderFlag.IsRange) == 0) { response.TryStaticFileCacheControl(); } switch (response.Type) { case Net.Http.ResponseType.ByteArray: case Net.Http.ResponseType.SubByteArray: case Net.Http.ResponseType.SubBuffer: if ((flag & Net.Http.HeaderFlag.IsRange) == 0) { #if DOTNET2 || DOTNET4 if ((flag & Net.Http.HeaderFlag.IsGZip) != 0 && isGZip) { response.Compress(); } #else if ((flag & Net.Http.HeaderFlag.IsGZip) != 0 && isGZip) { response.Compress(DomainServer.WebConfigIsFastestCompressionLevel); } #endif response.NoStore200(DomainServer.HtmlContentType); } else if (header.FormatRange(response.Body.Array.Length)) { response.NoStore200(DomainServer.HtmlContentType); } else if (socket.ResponseError(identity, AutoCSer.Net.Http.ResponseState.RangeNotSatisfiable416)) { return(true); } break; //case Net.Http.ResponseType.File: response.SetState(AutoCSer.Net.Http.ResponseState.Ok200); break; } if (socket.Response(identity, ref response)) { return(true); } } finally { AutoCSer.Net.Http.Response.Push(ref response); } return(false); }
///// <summary> ///// HTTP请求头部处理 ///// </summary> ///// <param name="domainServer">域名服务</param> ///// <param name="socket">HTTP套接字接口</param> ///// <param name="socketIdentity">套接字操作编号</param> ///// <param name="isAsynchronous">是否异步</param> ///// <param name="isPool">是否使用WEB页面池</param> //internal void LoadHeader(AutoCSer.Net.HttpDomainServer.ViewServer domainServer, AutoCSer.Net.Http.SocketBase socket, long socketIdentity, bool isAsynchronous, bool isPool) //{ // DomainServer = domainServer; // Socket = socket; // SocketIdentity = socketIdentity; // IsAsynchronous = isAsynchronous; // IsPool = isPool; //} ///// <summary> ///// 加载查询参数 ///// </summary> ///// <param name="form">HTTP请求表单</param> ///// <param name="isAjax">是否ajax请求</param> ///// <returns>是否成功</returns> //internal virtual void Load(AutoCSer.Net.Http.Form form, bool isAjax) //{ // throw new InvalidOperationException(); //} /// <summary> /// 清除当前请求数据 /// </summary> protected virtual void clear() { if (PageResponse != null) { PageResponse.Push(); PageResponse = null; } #if !NOJIT Socket = null; DomainServer = null; sessionId.Null(); #endif }
/// <summary> /// AJAX响应输出 /// </summary> internal unsafe void Response() { if (Socket.HttpHeader.AjaxCallBackNameIndex.Length == 0 && PageResponse == null) { AutoCSer.Net.Http.Response response = (Socket.HttpHeader.Flag & Net.Http.HeaderFlag.IsVersion) == 0 ? DomainServer.NullAjaxResponse : DomainServer.NullAjaxResponseStaticFile; SocketResponse(ref response); } else { byte *buffer = AutoCSer.UnmanagedPool.Tiny.Get(); try { Response(buffer); SocketResponse(ref PageResponse); } finally { AutoCSer.UnmanagedPool.Tiny.Push(buffer); } } }