public virtual ListenerRequest CreateRequest(HttpListenerContext httpContext, string operationName) { var req = new ListenerRequest(httpContext, operationName, RequestAttributes.None); req.RequestAttributes = req.GetAttributes(); return(req); }
protected override void ProcessRequest(HttpListenerContext context) { if (string.IsNullOrEmpty(context.Request.RawUrl)) return; var operationName = context.Request.GetOperationName(); var httpReq = new ListenerRequest(operationName, context.Request); var httpRes = new ListenerResponse(context.Response); var handler = HttpHandlerFactory.GetHandler(httpReq); var serviceStackHandler = handler as IServiceStackHttpHandler; if (serviceStackHandler != null) { var restHandler = serviceStackHandler as RestHandler; if (restHandler != null) { httpReq.OperationName = operationName = restHandler.RestPath.RequestType.Name; } serviceStackHandler.ProcessRequest(httpReq, httpRes, operationName); httpRes.Close(); return; } throw new NotImplementedException("Cannot execute handler: " + handler + " at PathInfo: " + httpReq.PathInfo); }
protected override Task ProcessRequestAsync(HttpListenerContext context) { if (string.IsNullOrEmpty(context.Request.RawUrl)) return ((object)null).AsTaskResult(); var operationName = context.Request.GetOperationName(); var httpReq = new ListenerRequest(operationName, context.Request); var httpRes = new ListenerResponse(context.Response); var handler = HttpHandlerFactory.GetHandler(httpReq); var serviceStackHandler = handler as IServiceStackHttpHandler; if (serviceStackHandler != null) { var restHandler = serviceStackHandler as RestHandler; if (restHandler != null) { httpReq.OperationName = operationName = restHandler.RestPath.RequestType.Name; } var task = serviceStackHandler.ProcessRequestAsync(httpReq, httpRes, operationName); task.ContinueWith(x => httpRes.Close()); return task; } return new NotImplementedException("Cannot execute handler: " + handler + " at PathInfo: " + httpReq.PathInfo) .AsTaskException(); }
protected void Start(IEnumerable <string> urlBases, WaitCallback listenCallback) { // *** Already running - just leave it in place if (this.IsStarted) { return; } if (this.Listener == null) { Listener = CreateHttpListener(); } foreach (var urlBase in urlBases) { if (HostContext.Config.HandlerFactoryPath == null) { HostContext.Config.HandlerFactoryPath = ListenerRequest.GetHandlerPathIfAny(urlBase); } Listener.Prefixes.Add(urlBase); } try { Listener.Start(); IsStarted = true; } catch (HttpListenerException ex) { if (Config.AllowAclUrlReservation && ex.ErrorCode == 5 && registeredReservedUrl == null) { foreach (var urlBase in urlBases) { registeredReservedUrl = AddUrlReservationToAcl(urlBase); if (registeredReservedUrl == null) { break; } } if (registeredReservedUrl != null) { Listener = null; Start(urlBases, listenCallback); return; } } throw ex; } ThreadPool.QueueUserWorkItem(listenCallback); }
/// <summary> /// Starts the Web Service /// </summary> /// <param name="listeningAtUrlBase"> /// A Uri that acts as the base that the server is listening on. /// Format should be: http://127.0.0.1:8080/ or http://127.0.0.1:8080/somevirtual/ /// Note: the trailing slash is required! For more info see the /// HttpListener.Prefixes property on MSDN. /// </param> protected void Start(string listeningAtUrlBase, WaitCallback listenCallback) { // *** Already running - just leave it in place if (this.IsStarted) { return; } if (this.Listener == null) { Listener = new System.Net.HttpListener(); } HostContext.Config.HandlerFactoryPath = ListenerRequest.GetHandlerPathIfAny(listeningAtUrlBase); Listener.Prefixes.Add(listeningAtUrlBase); IsStarted = true; try { Listener.Start(); } catch (HttpListenerException ex) { if (Config.AllowAclUrlReservation && ex.ErrorCode == 5 && registeredReservedUrl == null) { registeredReservedUrl = AddUrlReservationToAcl(listeningAtUrlBase); if (registeredReservedUrl != null) { Start(listeningAtUrlBase, listenCallback); return; } } throw ex; } ThreadPool.QueueUserWorkItem(listenCallback); }
public virtual ListenerRequest CreateRequest(HttpListenerContext httpContext, string operationName) { var req = new ListenerRequest(httpContext, operationName, RequestAttributes.None); req.RequestAttributes = req.GetAttributes(); return req; }
public static void HandleError(Exception ex, HttpListenerContext context) { try { var errorResponse = new ErrorResponse { ResponseStatus = new ResponseStatus { ErrorCode = ex.GetType().Name, Message = ex.Message, StackTrace = ex.StackTrace, } }; var operationName = context.Request.GetOperationName(); var httpReq = new ListenerRequest(operationName, context.Request); var httpRes = new ListenerResponse(context.Response); var requestCtx = new HttpRequestContext(httpReq, httpRes, errorResponse); var contentType = requestCtx.ResponseContentType; var serializer = HostContext.ContentTypes.GetResponseSerializer(contentType); if (serializer == null) { contentType = HostContext.Config.DefaultContentType; serializer = HostContext.ContentTypes.GetResponseSerializer(contentType); } httpRes.StatusCode = 500; httpRes.ContentType = contentType; serializer(requestCtx, errorResponse, httpRes); httpRes.Close(); } catch (Exception errorEx) { var error = "Error this.ProcessRequest(context)(Exception while writing error to the response): [{0}]: {1}" .Fmt(errorEx.GetType().Name, errorEx.Message); Log.ErrorFormat(error); } }
private static ListenerRequest GetRequest(HttpListenerContext httpContext, string operationName) { var req = new ListenerRequest(httpContext, operationName, RequestAttributes.None); req.RequestAttributes = req.GetAttributes(); return req; }
public virtual void ProcessRequest(HttpListenerContext context) { var operationName = this.RequestName ?? context.Request.GetOperationName(); if (String.IsNullOrEmpty(operationName)) return; if (DefaultHandledRequest(context)) return; var httpReq = new ListenerRequest(context, operationName); ProcessRequest(httpReq, httpReq.Response, operationName); }