Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AlibabaCloud.SDK.Oss20190517 不能使用吗? #7

Closed
jacksonwj opened this issue Jun 20, 2022 · 10 comments
Closed

AlibabaCloud.SDK.Oss20190517 不能使用吗? #7

jacksonwj opened this issue Jun 20, 2022 · 10 comments

Comments

@jacksonwj
Copy link

jacksonwj commented Jun 20, 2022

对于 OSS 的操作,现在使用的是 Aliyun.OSS.SDK.NetCore,偶然看到还有一个 AlibabaCloud.SDK.Oss20190517 的 SDK。

添加到项目内,调用方法 ListBucketsAsync(req),抛出异常:The method or operation is not implemented

请问,这个 SDK AlibabaCloud.SDK.Oss20190517 还没有实现完毕吗?

@jacksonwj jacksonwj changed the title OSS SDK 不能使用吗? AlibabaCloud.SDK.Oss20190517 不能使用吗? Jun 20, 2022
@jacksonwj
Copy link
Author

异常

@LeaFrock
Copy link

LeaFrock commented Jul 26, 2022

这么大的问题,居然还不处理。

我怀疑问题出在这里:

1、AlibabaCloud.SDK.Oss20190517.Client继承了AlibabaCloud.OpenApiClient。初看堆栈,是执行父类ExecuteAsync时报错,但因为这里非常粗暴地throw了异常,导致堆栈截断,看不到进一步的信息。

2、进一步分析源码,发现AlibabaCloud.SDK.Oss20190517.Client里包装了AlibabaCloud.GatewaySpi.Client,这是一个父类,里面的方法全部是throw new NotImplementedException()。不知道为什么不干脆写成抽象类?

3、实际在AlibabaCloud.SDK.Oss20190517.Client的构造函数中,初始化的是AlibabaCloud.GatewayOss.Client。代码如下:

        protected AlibabaCloud.GatewaySpi.Client _client;

        public Client(AlibabaCloud.OpenApiClient.Models.Config config): base(config)
        {
            this._client = new AlibabaCloud.GatewayOss.Client();
            this._spi = _client;
            this._endpointRule = "";
        }

最骚的操作来了:在AlibabaCloud.GatewayOss.Client类里,直接复制了父类的几个同名方法然后添加了具体实现……只有继承,并没有重载方法实现多态。这导致编译器使用new关键词覆盖了父类的各种方法,在Nuget包AlibabaCloud.GatewayOss目前最新版本0.0.3.0可以看到:
1658827202828

4、综上,在ExecuteAsync方法中,会调用到GatewaySpi.Client里的方法,而SDK开发者误以为赋值GatewayOss.Client就可以实现多态,事实上仍然只会调用父类里的方法:throw new NotImplementedException()。找个初级C#开发者,都不至于犯这种错误,阿里这么强大的开发团队,我只能怀疑是typo了。建议将GatewaySpi.Client改为abstract类,在GatewayOss.Client里override所有方法提供具体的实现。

5、希望尽快修复AlibabaCloud.SDK.Oss20190517包!至少该SDK基于HttpClient和异步API,并且底层还用ConcurrentDictionary自己实现了一个HttpClient池。想法是好的,虽然代码质量不敢恭维,但至少比原先那套SDK好!

@LeaFrock
Copy link

@AxiosLeo 您好,当前AlibabaCloud.SDK.Oss20190517不可用,不知您是否可以提供修复或帮忙反馈?

@AxiosLeo
Copy link

@LeaFrock 好的。我帮你反馈下这个问题。

@yndu13
Copy link
Contributor

yndu13 commented Jul 26, 2022

收到反馈,会近期支持。

@yndu13
Copy link
Contributor

yndu13 commented Aug 3, 2022

OSS SDK已更新

@yndu13 yndu13 closed this as completed Aug 3, 2022
@jacksonwj
Copy link
Author

jacksonwj commented Aug 5, 2022

@yndu13 好像还是有问题

调用方法,如下所示:

using Oss = AlibabaCloud.SDK.Oss20190517;

var ossCfg = new Config
{
    AccessKeyId = <Key>,
    AccessKeySecret = <Secret>,
    Endpoint = "oss-cn-hangzhou.aliyuncs.com"
};

var cli = new Oss.Client(ossCfg);

var req = new Oss.Models.ListBucketsRequest
{
    MaxKeys = 500
};

try
{
    // var result = await cli.ListBucketsAsync(req);
    var result = await cli.ListBucketsWithOptionsAsync(req, new Dictionary<string, string>(), new RuntimeOptions());
    if (result == null || result.Body == null || result.Body.Buckets == null ||
        result.Body.Buckets.Buckets == null || result.Body.Buckets.Buckets.Count == 0)
    {
        return new(code: 400, msg: "暂无 Bucket");
    }

    return new(result.Body.Buckets.Buckets, result.Body.Buckets.Buckets.Count);
}
catch (TeaException e)
{
    return new(code: 500, msg: Common.AssertAsString(e.Message));
}
catch (Exception e)
{
    var ex = new TeaException(new Dictionary<string, string>
    {
        { "message", e.Message }
    });

    return new(code: 500, msg: Common.AssertAsString(ex.Message));
}

异常如下图所示:

Exception.Message

Exception.StackTrace

不管是 ListBucketsAsync 还是 ListBucketsWithOptionsAsync,都会报相同的异常。

@jacksonwj
Copy link
Author

@LeaFrock 麻烦再帮忙反馈一下,好像还是不行。

@LeaFrock
Copy link

LeaFrock commented Aug 8, 2022

@yndu13 似乎又是model转换的问题,类似#9

@jacksonwj 建议另开issue。不过感觉阿里云对.NET SDK不是很上心,如果着急的话建议走阿里云工单进行反馈或者投诉。

@jacksonwj
Copy link
Author

@LeaFrock 感谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants