Example #1
0
        public X excute <X, Y>(Request <Y> request, HttpResponseHandler <X> responseHandler, KS3Signer <Y> ks3Signer) where Y : KS3Request
        {
            this.setUserAgent(request);

            HttpWebRequest  httpRequest  = null;
            HttpWebResponse httpResponse = null;
            X result = default(X);

            for (int i = 0; i < Constants.RETRY_TIMES; i++)
            {
                try
                {
                    // Sign the request if a signer was provided
                    if (ks3Signer != null && request.getOriginalRequest().getRequestCredentials() != null)
                    {
                        ks3Signer.sign(request, request.getOriginalRequest().getRequestCredentials());
                    }
                    request.setResourcePath(request.getResourcePath().Replace("%5C", "/").Replace("//", "/%2F"));
                    if (request.getResourcePath().EndsWith("%2F"))
                    {
                        request.setResourcePath(request.getResourcePath().Substring(0, request.getResourcePath().Length - 3));
                    }
                    httpRequest  = HttpRequestFactory.createHttpRequest(request, this.config);
                    httpResponse = (HttpWebResponse)httpRequest.GetResponse();

                    result = responseHandler.handle(httpResponse);
                    break;
                }
                catch (WebException we)
                {
                    HttpWebResponse  errorResponse    = (HttpWebResponse)we.Response;
                    ServiceException serviceException = null;
                    try
                    {
                        serviceException = errorResponseHandler.handle(errorResponse);
                    }
                    catch
                    {
                        throw we;
                    }
                    throw serviceException;
                }
                catch (IOException ex) {
                    if (i == Constants.RETRY_TIMES - 1)
                    {
                        throw ex;
                    }
                    Thread.Sleep(1000);
                }
                finally
                {
                    if (httpResponse != null)
                    {
                        httpResponse.Close();
                    }
                }
            }
            return(result);
        }