aliyun / aliyun-openapi-net-sdk

Alibaba Cloud SDK for .NET
https://www.nuget.org/profiles/aliyun-openapi-sdk
Other
541 stars 625 forks source link

最新代码中的 endpoints.xml 导致 iot 调用服务时发生SDK.InvalidRegionId 错误。 #132

Closed lhg0302 closed 5 years ago

lhg0302 commented 5 years ago

因为#40你关闭了,我只好重新提一个,因为问题没有解决

endpoints.xml是由sdk-core生成的,sdk-core没有改变,现在还是以一样的错误 我在client.GetAcsResponse(request);的直接抛出Exception,错误如下: "Aliyun.Acs.Core.Exceptions.ClientException: SDK.InvalidRegionId : Can not find endpoint to access**.\r\n 在 Aliyun.Acs.Core.Profile.DefaultProfile.GetEndpoints(String product, String regionId, String serviceCode, String endpointType)\r\n 在 Aliyun.Acs.Core.DefaultAcsClient.DoAction[T](AcsRequest1 request, Boolean autoRetry, Int32 maxRetryNumber, IClientProfile profile)\r\n 在 Aliyun.Acs.Core.DefaultAcsClient.DoAction[T](AcsRequest1 request)\r\n 在 Aliyun.Acs.Core.DefaultAcsClient.GetAcsResponse[T](AcsRequest`1 request)\r\n 在 TestProgram.Main(String[] args) 位置 F:\bookCoding\net\aliyun-openapi-net-sdk\ConsoleApp1\Program.cs:行号 22" | string

AxiosLeo commented 5 years ago

@lhg0302 我编写了一个ft复现了这个问题 Feature/Fixed/IotListProductByTags.cs

在调用 DescribeEndpoint 这个接口获取endpoint时,出现 InvalidRegionId 问题,造成endpoint为null,进而用户端出现 InvalidRegion 问题。

已经去跟接口方进行沟通了。

AxiosLeo commented 5 years ago

@lhg0302

找到问题原因了,iot产品不支持cn-hangzhou这个regionId,所以接口报InvalidRegionId是没问题的。

iot产品支持的regionId有以下几个:

cn-shanghai 上海 ap-southeast-1 新加坡 ap-northeast-1 日本东京 eu-central-1 德国法兰克福 us-west-1 美国硅谷 us-east-1 美国弗吉尼亚

AxiosLeo commented 5 years ago

@lhg0302

core 1.1.12 和 iot 6.6.2 版本 使用cn-shanghai这个regionId复现,测试通过。

您这边更换regionId后,再尝试一下,如果没有问题了,您可以关闭issue。

lhg0302 commented 5 years ago

非常感谢AxiosCros,但还是报错,我以改为cn-shanghai,我的代码:

IClientProfile profile = DefaultProfile.GetProfile(
            "cn-shanghai", "***", "***");
        DefaultAcsClient client = new DefaultAcsClient(profile);
            RegisterDeviceRequest request = new RegisterDeviceRequest();
            request.ProductKey = "a1Lersh4ycy";
            request.DeviceName = "facedoor1";
下面这句直接catch
            RegisterDeviceResponse response = client.GetAcsResponse(request);

catch信息:

  | E.Message | "必须使用适当的属性或方法修改“User-Agent”标头。\r\n参数名: name" | string 在 System.Net.WebHeaderCollection.ThrowOnRestrictedHeader(String headerName) 在 System.Net.WebHeaderCollection.Add(String name, String value) 在 Aliyun.Acs.Core.Http.HttpResponse.GetWebRequest(HttpRequest request) 在 Aliyun.Acs.Core.Http.HttpResponse.GetResponse(HttpRequest request, Nullable1 timeout) 在 Aliyun.Acs.Core.DefaultAcsClient.GetResponse(HttpRequest httpRequest) 在 Aliyun.Acs.Core.DefaultAcsClient.DoAction[T](AcsRequest1 request, Boolean autoRetry, Int32 maxRetryNumber, String regionId, AlibabaCloudCredentials credentials, Signer signer, Nullable1 format, List1 endpoints) 在 Aliyun.Acs.Core.DefaultAcsClient.DoAction[T](AcsRequest1 request, Boolean autoRetry, Int32 maxRetryNumber, IClientProfile profile) 在 Aliyun.Acs.Core.DefaultAcsClient.DoAction[T](AcsRequest1 request) 在 Aliyun.Acs.Core.DefaultAcsClient.GetAcsResponse[T](AcsRequest`1 request) 在 TestProgram.Main(String[] args) 位置 F:\bookCoding\net\aliyun-openapi-net-sdk\ConsoleApp1\Program.cs:行号 22

我调试了下:User-Agent如下 User-Agent:"Alibaba Cloud (Microsoft Windows 10.0.17134 ) Microsoft.NET/Framework Core/1.1.12.0"

AxiosLeo commented 5 years ago

@lhg0302

好的,我去复现一下这个问题,查询具体原因。

AxiosLeo commented 5 years ago

@lhg0302

我没有复现出来。 请问您是使用的ailyun-net-sdk-core:1.1.12 和 aliyun-net-sdk-iot:6.6.2吗?

目前1.1.12的这个版本,是不会生成 User-Agent:"Alibaba Cloud (Microsoft Windows 10.0.17134 ) Microsoft.NET/Framework Core/1.1.12.0" 这个请求头的。您是自己手动添加的吗?

AxiosLeo commented 5 years ago

@lhg0302

请使用nuget的方式下载安装aliyun-net-sdk-core及其它sdk Nuget Core Package

安装方式

dotnet add package aliyun-net-sdk-core --version 1.1.12
dotnet add package aliyun-net-sdk-iot --version 6.6.2
lhg0302 commented 5 years ago

多谢,可以了