Exemplo n.º 1
0
        void getResponseCallback <T>(IAsyncResult result) where T : new()
        {
            SDBAsyncResult sdbAsyncResult = result as SDBAsyncResult;

            if (null == sdbAsyncResult)
            {
                sdbAsyncResult = result.AsyncState as SDBAsyncResult;
            }

            sdbAsyncResult.RequestState.GetResponseCallbackCalled = true;
            bool shouldRetry = false;

            try
            {
                HttpStatusCode  statusCode;
                RequestState    state        = sdbAsyncResult.RequestState;
                HttpWebResponse httpResponse = null;
                try
                {
                    httpResponse = state.WebRequest.EndGetResponse(result) as HttpWebResponse;
                    sdbAsyncResult.FinalSDBResponse = handleHttpResponse <T>(httpResponse, out statusCode) as SimpleDBResponse;
                }
                catch (WebException we)
                {
                    shouldRetry = handleHttpWebErrorResponse(sdbAsyncResult, we, out statusCode);
                }

                if (shouldRetry)
                {
                    sdbAsyncResult.RequestState.WebRequest.Abort();
                    sdbAsyncResult.RetriesAttempt++;
                    handleRetry(sdbAsyncResult, statusCode);
                    invoke <T>(sdbAsyncResult);
                }
            }
            catch (Exception e)
            {
                AmazonSimpleDBException exception = e as AmazonSimpleDBException;

                if (null != exception)
                {
                    sdbAsyncResult.FinalSDBResponse = exception;
                    return;
                }
                sdbAsyncResult.RequestState.WebRequest.Abort();
                LOGGER.Error("Error for GetResponse", e);
                sdbAsyncResult.Exception = e;
                shouldRetry = false;
            }
            finally
            {
                if (!shouldRetry)
                {
                    if (null != OnSimpleDBResponse)
                    {
                        OnSimpleDBResponse.Invoke(this, new ResponseEventArgs(sdbAsyncResult.FinalSDBResponse));
                    }
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Select
        /// </summary>
        /// <param name="request">Select  request</param>
        /// <remarks>
        /// The Select operation returns a set of item names and associate attributes that match the
        /// query expression. Select operations that run longer than 5 seconds will likely time-out
        /// and return a time-out error response.
        /// </remarks>
        public void Select(SelectRequest request)
        {
            IDictionary <string, string> parameters = ConvertSelect(request);
            SDBAsyncResult result = new SDBAsyncResult(parameters, null);

            invoke <SelectResponse>(result);
        }
Exemplo n.º 3
0
        void getRequestStreamCallback <T>(IAsyncResult result) where T : new()
        {
            SDBAsyncResult sdbAsyncResult = result as SDBAsyncResult;

            if (null == sdbAsyncResult)
            {
                sdbAsyncResult = result.AsyncState as SDBAsyncResult;
            }

            sdbAsyncResult.RequestState.GetRequestStreamCallbackCalled = true;
            try
            {
                RequestState state = sdbAsyncResult.RequestState;

                Stream requestStream;
                requestStream = state.WebRequest.EndGetRequestStream(result);

                using (requestStream)
                {
                    requestStream.Write(sdbAsyncResult.RequestState.RequestData, 0, sdbAsyncResult.RequestState.RequestData.Length);
                }
                state.WebRequest.BeginGetResponse(new AsyncCallback(this.getResponseCallback <T>), sdbAsyncResult);
            }
            catch (Exception e)
            {
                sdbAsyncResult.RequestState.WebRequest.Abort();
                LOGGER.Error("Error for GetRequestStream", e);
                sdbAsyncResult.Exception = e;
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Initiates the asynchronous execution of the BatchDeleteAttributes operation.
        /// <seealso cref="M:Amazon.SimpleDB.AmazonSimpleDB.BatchDeleteAttributes"/>
        /// </summary>
        /// <param name="request">The BatchDeleteAttributesRequest that defines the parameters of
        /// the operation.</param>
        public void BeginBatchDeleteAttributes(BatchDeleteAttributesRequest request)
        {
            IDictionary <string, string> parameters = ConvertBatchDeleteAttributes(request);
            SDBAsyncResult result = new SDBAsyncResult(parameters, null);

            invoke <BatchDeleteAttributesResponse>(result);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Initiates the asynchronous execution of the DeleteDomain operation.
        /// <seealso cref="M:Amazon.SimpleDB.AmazonSimpleDB.DeleteDomain"/>
        /// </summary>
        /// <param name="request">The DeleteDomainRequest that defines the parameters of
        /// the operation.</param>
        public void BeginDeleteDomain(DeleteDomainRequest request)
        {
            IDictionary <string, string> parameters = ConvertDeleteDomain(request);
            SDBAsyncResult result = new SDBAsyncResult(parameters, null);

            invoke <DeleteDomainResponse>(result);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Initiates the asynchronous execution of the DomainMetadata operation.
        /// <seealso cref="M:Amazon.SimpleDB.AmazonSimpleDB.DomainMetadata"/>
        /// </summary>
        /// <param name="request">The DomainMetadataRequest that defines the parameters of
        /// the operation.</param>
        public void BeginDomainMetadata(DomainMetadataRequest request)
        {
            IDictionary <string, string> parameters = ConvertDomainMetadata(request);
            SDBAsyncResult result = new SDBAsyncResult(parameters, null);

            invoke <DomainMetadataResponse>(result);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Initiates the asynchronous execution of the ListDomains operation.
        /// <seealso cref="M:Amazon.SimpleDB.AmazonSimpleDB.ListDomains"/>
        /// </summary>
        /// <param name="request">The ListDomainsRequest that defines the parameters of
        /// the operation.</param>
        public void BeginListDomains(ListDomainsRequest request)
        {
            IDictionary <string, string> parameters = ConvertListDomains(request);
            SDBAsyncResult result = new SDBAsyncResult(parameters, null);

            invoke <ListDomainsResponse>(result);
        }
Exemplo n.º 8
0
        void handleRetry(SDBAsyncResult sdbAsyncResult, HttpStatusCode statusCode)
        {
            int retries = sdbAsyncResult.RetriesAttempt;

            if (retries <= this.config.MaxErrorRetry)
            {
                LOGGER.InfoFormat("Retry number {0} for request {1}.", retries, sdbAsyncResult.ActionName);
            }
            pauseOnRetry(retries, this.config.MaxErrorRetry, statusCode);
        }
Exemplo n.º 9
0
        void invoke <T>(SDBAsyncResult sdbAsyncResult) where T : new()
        {
            /* Add required request parameters */
            addRequiredParameters(sdbAsyncResult.Parameters);

            string queryString = AWSSDKUtils.GetParametersAsString(sdbAsyncResult.Parameters);

            byte[] requestData = Encoding.UTF8.GetBytes(queryString);

            HttpWebRequest request = configureWebRequest(config);

            sdbAsyncResult.RequestState = new RequestState(request, requestData);

            request.BeginGetRequestStream(new AsyncCallback(this.getRequestStreamCallback <T>), sdbAsyncResult);
        }
Exemplo n.º 10
0
        bool handleHttpWebErrorResponse(SDBAsyncResult sdbAsyncResult, WebException we, out HttpStatusCode statusCode)
        {
            string responseBody;

            using (HttpWebResponse httpErrorResponse = we.Response as HttpWebResponse)
            {
                if (httpErrorResponse == null)
                {
                    // Abort the unsuccessful request
                    sdbAsyncResult.RequestState.WebRequest.Abort();
                    throw we;
                }
                statusCode = httpErrorResponse.StatusCode;
                using (StreamReader reader = new StreamReader(httpErrorResponse.GetResponseStream(), Encoding.UTF8))
                {
                    responseBody = reader.ReadToEnd();
                }

                // Abort the unsuccessful request
                sdbAsyncResult.RequestState.WebRequest.Abort();
            }

            bool shouldRetry = false;

            if (statusCode == HttpStatusCode.InternalServerError ||
                statusCode == HttpStatusCode.ServiceUnavailable)
            {
                shouldRetry = true;
                sdbAsyncResult.RetriesAttempt++;
                pauseOnRetry(sdbAsyncResult.RetriesAttempt, this.config.MaxErrorRetry, statusCode);
            }
            else
            {
                throw reportAnyErrors(responseBody, statusCode);
            }

            return(shouldRetry);
        }