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)); } } } }
/// <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); }
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; } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
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); }
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); }
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); }