Exemplo n.º 1
0
        public HttpResponse DoAction <T>(AcsRequest <T> request, bool autoRetry, int maxRetryNumber, string regionId,
                                         Credential credential, ISigner signer, FormatType?format, List <Endpoint> endpoints) where T : AcsResponse
        {
            FormatType?requestFormatType = request.AcceptFormat;

            if (null != requestFormatType)
            {
                format = requestFormatType;
            }
            if (null == request.RegionId)
            {
                request.RegionId = regionId;
            }
            ProductDomain domain = Endpoint.FindProductDomain(regionId, request.Product, endpoints, this);

            if (null == domain)
            {
                throw new ClientException("SDK.InvalidRegionId", "Can not find endpoint to access.");
            }
            HttpRequest  httpRequest = request.SignRequest(signer, credential, format, domain);
            int          retryTimes  = 1;
            HttpResponse response    = HttpResponse.GetResponse(httpRequest, timeoutInMilliSeconds);

            while (500 <= response.Status && autoRetry && retryTimes < maxRetryNumber)
            {
                httpRequest = request.SignRequest(signer, credential, format, domain);
                response    = HttpResponse.GetResponse(httpRequest, timeoutInMilliSeconds);
                retryTimes++;
            }
            return(response);
        }
Exemplo n.º 2
0
        public List<Endpoint> GetEndpoints()
        {
            XmlDocument doc = LoadEndpointDocument();
            List<Endpoint> endpoints = new List<Endpoint>();
            XmlNodeList endpointNodes = doc.GetElementsByTagName("Endpoint");
            foreach (XmlNode node in endpointNodes)
            {
                HashSet<string> regionIds = new HashSet<string>();

                List<ProductDomain> products = new List<ProductDomain>();
                XmlNodeList regionIdNodes = node.SelectSingleNode("RegionIds").SelectNodes("RegionId");
                XmlNodeList productNodes = node.SelectSingleNode("Products").SelectNodes("Product");
                foreach (XmlNode regionIdNode in regionIdNodes)
                {
                    regionIds.Add(regionIdNode.InnerText);
                }

                foreach (XmlNode productNode in productNodes)
                {
                    ProductDomain productDomain = new ProductDomain();
                    productDomain.DomianName = productNode.SelectSingleNode("DomainName").InnerText;
                    productDomain.ProductName = productNode.SelectSingleNode("ProductName").InnerText;
                    products.Add(productDomain);
                }
                endpoints.Add(new Endpoint(node.Attributes["name"].InnerText, regionIds, products));
            }

            return endpoints;
        }
Exemplo n.º 3
0
        private List <Endpoint> GetEndPointsFromLocation(String regionId, String product, Credential credential, String locationProduct)
        {
            if (null == locationEndpoints)
            {
                locationEndpoints = new List <Endpoint>();
            }

            Endpoint endpoint = FindLocationEndpointByRegionId(regionId);

            if (null == endpoint)
            {
                FillEndPointFromLocation(regionId, product, credential, locationProduct);
            }
            else
            {
                List <ProductDomain> productDomains = endpoint.ProductDomains;
                ProductDomain        productDomain  = FindProductDomain(productDomains, product);
                if (null == productDomain)
                {
                    FillEndPointFromLocation(regionId, product, credential, locationProduct);
                }
            }

            return(locationEndpoints);
        }
Exemplo n.º 4
0
        public List <Endpoint> GetEndpoints(String regionId, String product, Credential credential, String locationProduct)
        {
            if (null != locationProduct)
            {   //先自动寻址,找不到再找本地配置
                List <Endpoint> endPoints = GetEndPointsFromLocation(regionId, product, credential, locationProduct);
                Endpoint        endpoint  = FindLocationEndpointByRegionId(regionId);
                if (null == endpoint)
                {
                    return(GetEndPointsFromLocal());
                }
                else
                {
                    List <ProductDomain> productDomains = endpoint.ProductDomains;
                    ProductDomain        productDomain  = FindProductDomain(productDomains, product);
                    if (null == productDomain)
                    {
                        return(GetEndPointsFromLocal());
                    }
                }

                return(endPoints);
            }
            //直接从本地配置中查找
            return(GetEndPointsFromLocal());
        }
        public DescribeEndpointResponse DescribeEndpoint(String regionId, String locationProduct,
                                                         Credential credential, LocationConfig locationConfig)
        {
            if (isEmpty(locationProduct))
            {
                return(null);
            }

            DescribeEndpointRequest request = new DescribeEndpointRequest();

            request.AcceptFormat    = FormatType.JSON;
            request.Id              = regionId;
            request.RegionId        = locationConfig.RegionId;
            request.LocationProduct = locationProduct;
            request.EndpointType    = DEFAULT_ENDPOINT_TYPE;

            ProductDomain domain = new ProductDomain(locationConfig.Product, locationConfig.Endpoint);

            try
            {
                HttpRequest  httpRequest  = request.SignRequest(signer, credential, FormatType.JSON, domain);
                HttpResponse httpResponse = HttpResponse.GetResponse(httpRequest);
                if (httpResponse.isSuccess())
                {
                    String data = System.Text.Encoding.UTF8.GetString(httpResponse.Content);
                    DescribeEndpointResponse response = getEndpointResponse(data, DEFAULT_ENDPOINT_TYPE);
                    if (null == response || isEmpty(response.Endpoint))
                    {
                        return(null);
                    }
                    return(response);
                }
                AcsError error = readError(httpResponse, FormatType.JSON);
                if (500 <= httpResponse.Status)
                {
                    Console.WriteLine("Invoke_Error, requestId:" + error.RequestId + "; code:" + error.ErrorCode
                                      + "; Msg" + error.ErrorMessage);
                    return(null);
                }
                Console.WriteLine("Invoke_Error, requestId:" + error.RequestId + "; code:" + error.ErrorCode
                                  + "; Msg" + error.ErrorMessage);
                return(null);
            }
            catch (Exception e)
            {
                Console.WriteLine("Invoke Remote Error,Msg" + e.Message);
                return(null);
            }
        }
Exemplo n.º 6
0
        private static void UpdateEndpoint(String regionId, String product, String domain, Endpoint endpoint)
        {
            ISet <String> regionIds = endpoint.RegionIds;

            regionIds.Add(regionId);

            List <ProductDomain> productDomains = endpoint.ProductDomains;
            ProductDomain        productDomain  = FindProductDomain(productDomains, product);

            if (null == productDomain)
            {
                productDomains.Add(new ProductDomain(product, domain));
            }
            else
            {
                productDomain.DomianName = domain;
            }
        }
Exemplo n.º 7
0
 public static ProductDomain FindProductDomain(String regionId, String product,
                                               List <Endpoint> endpoints, IAcsClient acsClient)
 {
     if (null == regionId || null == product || null == endpoints)
     {
         return(null);
     }
     foreach (Endpoint endpoint in endpoints)
     {
         if (endpoint.RegionIds.Contains(regionId))
         {
             ProductDomain domain = FindProductDomainByProduct(endpoint.ProductDomains, product);
             return(domain);
         }
     }
     if ("Location".Equals(product))
     {
         return(new ProductDomain("Location", "location.aliyuncs.com"));
     }
     return(null);
 }
Exemplo n.º 8
0
        public override HttpRequest SignRequest(ISigner signer, Credential credential, FormatType?format, ProductDomain domain)
        {
            Dictionary <string, string> imutableMap = new Dictionary <string, string>(this.Headers);

            if (null != signer && null != credential)
            {
                string accessKeyId  = credential.AccessKeyId;
                string accessSecret = credential.AccessSecret;
                imutableMap = this.Composer.RefreshSignParameters(Headers, signer, accessKeyId, format);
                string strToSign = this.Composer.ComposeStringToSign(Method, uriPattern, signer, QueryParameters, imutableMap, pathParameters);
                string signature = signer.SignString(strToSign, accessSecret);
                DictionaryUtil.Add(imutableMap, "Authorization", "acs " + accessKeyId + ":" + signature);
            }
            Url          = this.ComposeUrl(domain.DomianName, QueryParameters);
            this.Headers = imutableMap;
            return(this);
        }
Exemplo n.º 9
0
        public override HttpRequest SignRequest(ISigner signer, Credential credential, FormatType?format, ProductDomain domain)
        {
            Dictionary <String, String> imutableMap = new Dictionary <String, String>(QueryParameters);

            if (null != signer && null != credential)
            {
                String accessKeyId  = credential.AccessKeyId;
                String accessSecret = credential.AccessSecret;
                imutableMap = this.Composer.RefreshSignParameters(QueryParameters, signer, accessKeyId, format);
                imutableMap.Add("RegionId", RegionId);
                String strToSign = this.Composer.ComposeStringToSign(Method, null, signer, imutableMap, null, null);
                String signature = signer.SignString(strToSign, accessSecret + "&");
                imutableMap.Add("Signature", signature);
            }

            String url = ComposeUrl(domain.DomianName, imutableMap);

            this.Url = url;
            return(this);
        }
Exemplo n.º 10
0
 public abstract HttpRequest SignRequest(ISigner signer, Credential credential,
                                         FormatType?format, ProductDomain domain);