internal void ProcessRequest()
        {
            try
            {
                // Get Request information
                _httpContext = CreateHttpContext();

                if (_serverContext.RequestFilter != null)
                {
                    _serverContext.RequestFilter.FilterRequest(_httpContext.Request, _httpContext.Response);
                }

                // Interrupt execution of this request if response is sent
                if (_httpContext.Response.IsSent)
                {
                    return;
                }

                // Create reponse
                if (_httpContext.Response.HttpStatusCode == null)
                {
                    CreateResponse();
                }

                // Interrupt execution of this request if response is sent
                if (_httpContext.Response.IsSent)
                {
                    return;
                }

                // IResponseFilter ?
                if (_serverContext.ResponseFilter != null)
                {
                    _serverContext.ResponseFilter.FilterResponse(_httpContext.Response, _httpContext.Request);
                }

                // Interrupt execution of this request if response is sent
                if (_httpContext.Response.IsSent)
                {
                    return;
                }

                // Send response
                SendResponse();
            }
            catch (Exception e)
            {
                try
                {
                    _responseHandler.SendInternalServerError(_httpContext.Socket, e);
                }
                catch (Exception innerException)
                {
                    throw new Exception("Error in error handler ", innerException);
                }
                throw; // Re throw error to error handler after trying to send to client
            }
        }