private static IHttpHandler GetNotFoundHttpHandler(string servicePath) { IHttpHandler handler = EndpointHost.Config.GetHandlerForErrorStatus(HttpStatusCode.NotFound, servicePath); if (handler == null) { handler = new NotFoundHttpHandler(servicePath) { IsIntegratedPipeline = IsIntegratedPipeline, WebHostPhysicalPath = WebHostPhysicalPath, }; } return(handler); }
private void ProcessRequest(MessageContext context) { //NOTE: This method is called on a background thread and must be protected by an outer big-try catch var httpReq = new RequestWrapper(context.Request); var httpRes = new ResponseWrapper(); IServiceStackHttpHandler handler = null; string operationName, contentType; //var handler = ServiceStackHttpHandlerFactory.GetHandler(httpReq); var restPath = RestHandler.FindMatchingRestPath(httpReq.HttpMethod, httpReq.PathInfo, out contentType); if (restPath != null) { handler = new RestHandler { RestPath = restPath, RequestName = restPath.RequestType.Name }; httpReq.OperationName = operationName = ((RestHandler)handler).RestPath.RequestType.Name; } else { handler = new NotFoundHttpHandler(); var stream = httpRes.OutputStream; //Bug fix: reading the OutputStream property will cause it to be created if it's null httpReq.OperationName = operationName = null; } HttpResponsePacket resPacket = null; try { handler.ProcessRequest(httpReq, httpRes, operationName); resPacket = CreateResponsePacketFromWrapper(httpRes, subscriber); } catch (Exception exception) { //Send Exception details back to Queue resPacket = CreateResponsePacketFromException(exception); } finally { httpReq.InputStream.Close(); httpRes.Close(); } if (resPacket == null) { //TODO: Not good, Log this //TODO: derive exception from RestBus.Exceptions class resPacket = CreateResponsePacketFromException(new ApplicationException("Unable to get response")); } try { //TODO: Why can't the subscriber append the subscriber id itself from within sendresponse subscriber.SendResponse(context, resPacket); } catch { //TODO: Log SendResponse error } }