Ejemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MwsException"/> class.
        /// Initializes exception with information available from the service plus from an exception
        /// Needed for backwards compatibility.
        /// </summary>
        /// <param name="statusCode">HTTP status code for error response (as an int).</param>
        /// <param name="message">Error message from HTTP header.</param>
        /// <param name="errorCode">Error code from response XML.</param>
        /// <param name="errorType">Error type from response XML.</param>
        /// <param name="xml">Compete XML found in response.</param>
        /// <param name="rhmd">Response header information.</param>
        /// <param name="cause">Wrapped exception.</param>
        public MwsException(int statusCode, string message, string errorCode, string errorType, string xml, MwsResponseHeaderMetadata rhmd, Exception cause)
            : base()
        {
            _statusCode = statusCode;
            _rhmd       = rhmd;
            _xml        = xml;
            _errorType  = errorType;
            _errorCode  = errorCode;
            _message    = message;

            if (xml != null)
            {
                PopulateFromXML(xml);
            }

            if (cause is MwsException)
            {
                PopulateFromMWSException((MwsException)cause);
            }
        }
Ejemplo n.º 2
0
        private void PopulateFromMWSException(MwsException e)
        {
            if (e.StatusCode != null)
            {
                _statusCode = (int)e.StatusCode;
            }

            if (e.Message != null)
            {
                _message = e.Message;
            }

            if (e._errorCode != null)
            {
                _errorCode = e.ErrorCode;
            }

            if (e._errorType != null)
            {
                _errorType = e.ErrorType;
            }

            if (e._detail != null)
            {
                _detail = e.Detail;
            }

            if (e._xml != null)
            {
                _xml = e.XML;
            }

            if (e.ResponseHeaderMetadata != null)
            {
                _rhmd = e.ResponseHeaderMetadata;
            }
        }
 public MwsResponseHeaderMetadata(MwsResponseHeaderMetadata rhmd)
     : this(rhmd.RequestId, rhmd.ResponseContext, rhmd.Timestamp, rhmd.QuotaMax, rhmd.QuotaRemaining, rhmd.QuotaResetsAt)
 {
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Creates a request and invokes it.
        /// </summary>
        /// <returns></returns>
        /// <exception cref="MwsException">Exceptions from invoking the request.</exception>
        public IMwsReader Invoke()
        {
            string responseBody;
            string message;
            var    statusCode = default(HttpStatusCode);

            /* Add required request parameters */
            AddRequiredParameters();
            var queryString = GetParametersAsString(_parameters);
            var retries     = 0;

            do
            {
                /* Submit the request and read response body */
                try
                {
                    request = _connection.GetHttpClient(_serviceEndPoint.URI);
                    var requestData = new UTF8Encoding().GetBytes(queryString);
                    request.ContentLength = requestData.Length;
                    using (var requestStream = request.GetRequestStream())
                    {
                        requestStream.Write(requestData, 0, requestData.Length);
                    }

                    using (var httpResponse = request.GetResponse() as HttpWebResponse)
                    {
                        statusCode = httpResponse.StatusCode;
                        message    = httpResponse.StatusDescription;
                        _ResponseHeaderMetadata = GetResponseHeaderMetadata(httpResponse);
                        var reader = new StreamReader(httpResponse.GetResponseStream(), Encoding.UTF8);
                        responseBody = reader.ReadToEnd();
                    }

                    if (statusCode == HttpStatusCode.OK)
                    {
                        return(new MwsXmlReader(responseBody));
                    }

                    var e = new MwsException((int)statusCode, message, null, null, responseBody, _ResponseHeaderMetadata);

                    if (statusCode == HttpStatusCode.InternalServerError)
                    {
                        if (PauseIfRetryNeeded(retries++))
                        {
                            continue;
                        }
                    }

                    throw e;
                }

                /* Web exception is thrown on unsuccessful responses */
                catch (WebException we)
                {
                    using (var httpErrorResponse = (HttpWebResponse)we.Response as HttpWebResponse)
                    {
                        if (httpErrorResponse == null)
                        {
                            throw new MwsException(we);
                        }

                        statusCode = httpErrorResponse.StatusCode;
                        using (var reader = new StreamReader(httpErrorResponse.GetResponseStream(), Encoding.UTF8))
                        {
                            responseBody = reader.ReadToEnd();
                        }
                    }

                    // retry logic
                    if (PauseIfRetryNeeded(retries++))
                    {
                        continue;
                    }

                    throw new MwsException((int)statusCode, null, null, null, responseBody, null);
                }

                /* Catch other exceptions, attempt to convert to formatted exception,
                 * else rethrow wrapped exception */
                catch (Exception e)
                {
                    throw new MwsException(e);
                }
            }while (true);
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MwsException"/> class.
 /// Initializes exception with information available from the service.
 /// </summary>
 /// <param name="statusCode">HTTP status code for error response (as an int).</param>
 /// <param name="message">Error message from HTTP header.</param>
 /// <param name="errorCode">Error code from response XML.</param>
 /// <param name="errorType">Error type from response XML.</param>
 /// <param name="xml">Compete XML found in response.</param>
 /// <param name="rhmd">Response header information.</param>
 public MwsException(int statusCode, string message, string errorCode, string errorType, string xml, MwsResponseHeaderMetadata rhmd)
     : this(statusCode, message, errorCode, errorType, xml, rhmd, null)
 {
 }