Пример #1
0
        protected TResponse PostPut <TResponse>(string url, string method, Dictionary <string, string> headers, object payload, IEnumerable <HttpStatusCode> expectedStatusCodes)
        {
            var request  = CreateRequest(url, method, headers, payload);
            var response = _httpHandler.HandleRequest(request);

            ProcessResponse(response, expectedStatusCodes ?? new [] { HttpStatusCode.OK });

            return(UnwrapResponse <TResponse>(response));
        }
Пример #2
0
        public void Execute()
        {
            Action action = () =>
            {
                handler.SetBeginTimestamp(beginTime);
                handler.HandleRequest(context.Request, context.Response);
            };

            HandleRequestWithinExceptionHandler(action, context.Response);
        }
Пример #3
0
        public void Do(object state)
        {
            HttpData ctx = (HttpData)state;

            try
            {
                IHttpHandler clonedHandler = (IHttpHandler)this.handler.Clone();
                clonedHandler.SetBeginTimestamp(ctx.BeginTime);
                clonedHandler.HandleRequest(ctx.Context.Request, ctx.Context.Response);
            }
            catch (Cloud.WammerCloudException e)
            {
                // cannot connect to Waveface cloud
                if (e.HttpError != WebExceptionStatus.ProtocolError)
                {
                    HttpHelper.RespondFailure(ctx.Context.Response, new WammerStationException(e.InnerException.Message, (int)StationApiError.ConnectToCloudError), (int)HttpStatusCode.BadRequest);
                    logger.Warn("Connection to cloud error", e);
                    return;
                }

                // if cloud returns bad request error, bypass it to client
                WebException webex = (WebException)e.InnerException;
                if (webex != null)
                {
                    HttpWebResponse webres = (HttpWebResponse)webex.Response;
                    if (webres != null)
                    {
                        if (webres.StatusCode == HttpStatusCode.BadRequest)
                        {
                            Cloud.CloudResponse cloudres = fastJSON.JSON.Instance.ToObject <Cloud.CloudResponse>(e.response);
                            HttpHelper.RespondFailure(ctx.Context.Response, cloudres);
                            logger.Warn("Connection to cloud error", e);
                            return;
                        }

                        HttpHelper.RespondFailure(ctx.Context.Response,
                                                  new WammerStationException(e.InnerException.Message, e.WammerError), (int)webres.StatusCode);
                        logger.Warn("Connecting to cloud error", e);
                        return;
                    }
                }

                HttpHelper.RespondFailure(ctx.Context.Response,
                                          new WammerStationException(e.Message, e.WammerError), (int)HttpStatusCode.BadRequest);
                logger.Warn("Connecting to cloud error", e);
            }
            catch (ServiceUnavailableException e)
            {
                HttpHelper.RespondFailure(ctx.Context.Response, e, (int)HttpStatusCode.ServiceUnavailable);
                logger.Warn("Service unavailable", e);
            }
            catch (WammerStationException e)
            {
                HttpHelper.RespondFailure(ctx.Context.Response, e, (int)HttpStatusCode.BadRequest);
                logger.Warn("Http handler error", e);
            }
            catch (FormatException e)
            {
                HttpHelper.RespondFailure(ctx.Context.Response, e, (int)HttpStatusCode.BadRequest);
                logger.Warn("Request format is incorrect", e);
            }
            catch (WebException webex)
            {
                Wammer.Cloud.WammerCloudException ex = new Cloud.WammerCloudException("Request to cloud failed", webex);
                HttpHelper.RespondFailure(ctx.Context.Response, webex, (int)HttpStatusCode.InternalServerError);
                logger.Warn("Connecting to cloud error", ex);
            }
            catch (Exception e)
            {
                HttpHelper.RespondFailure(ctx.Context.Response, e, (int)HttpStatusCode.InternalServerError);
                logger.Warn("Internal server error", e);
            }
        }