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); }
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; }
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); }
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); } }
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; } }
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); }
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); }
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); }
public abstract HttpRequest SignRequest(ISigner signer, Credential credential, FormatType?format, ProductDomain domain);