美文网首页
迷之自信的对象存储 OSS SDK陷入无限等待

迷之自信的对象存储 OSS SDK陷入无限等待

作者: 极无宪 | 来源:发表于2020-05-21 23:12 被阅读0次

阿里的对象存储 OSS SDK 对于自己的网络可能是特别的自信,sdk中超时时间是-1,也就是不设置超时时间。写这个sdk的作者是认为不可能超时,推送一定能够成功到达么?
如果遇到网络原因,可能会处于无限等待中,将导致整个程序无反应。
而MSDN中HttpWebRequest的默认超时时间是100秒。


本来我用的多线程传输图片,结果一个个的等待,所有线程都处于等待状态中,程序没反应,也不报错,最近一段时间比较频繁。

    public class ClientConfiguration: ICloneable
    {
...
   private int _connectionTimeout = -1;//默认为-1
...
}
    internal static class HttpFactory
    {
...
        // Set request headers
        private static void SetRequestHeaders(HttpWebRequest webRequest, ServiceRequest serviceRequest,
                                              ClientConfiguration configuration)
        {
            webRequest.Timeout = configuration.ConnectionTimeout;//默认-1
            webRequest.ReadWriteTimeout = configuration.ConnectionTimeout;//默认-1
            webRequest.Method = serviceRequest.Method.ToString().ToUpperInvariant();

            // Because it is not allowed to set common headers
            // with the WebHeaderCollection.Add method,
            // we have to call an internal method to skip validation.
            foreach (var h in serviceRequest.Headers)
            {
                // Nginx does not accept a chunked encoding request with Content-Length, as detailed in #OSS-2848
                if (h.Key.Equals(HttpHeaders.ContentLength) && (serviceRequest.UseChunkedEncoding || 
                    (serviceRequest.Content != null && !serviceRequest.Content.CanSeek) || serviceRequest.Content == null))
                {
                    continue;
                }

                HttpExtensions.AddInternal(webRequest.Headers, h.Key, h.Value);
            }

            // Set user-agent
            if (!string.IsNullOrEmpty(configuration.UserAgent))
                webRequest.UserAgent = configuration.UserAgent;
        }
...
}

解决这个问题的方法很简单,在实例化时,把超时的时间修改一下就好了,代码如下:

    var _configuration = new ClientConfiguration();
    _configuration.ConnectionTimeout = 20000; //单位是毫秒,设置20秒超时
    var _client = new OssClient(endpoint, accessKeyId, accessKeySecret, _configuration);

相关文章

网友评论

      本文标题:迷之自信的对象存储 OSS SDK陷入无限等待

      本文链接:https://www.haomeiwen.com/subject/pkgzohtx.html