用于 .NET 的媒体服务 SDK 中的重试逻辑

使用 Azure 服务时,可能会发生暂时性故障。 如果发生暂时性故障,在大多数情况下,重试几次后操作即可成功。 用于 .NET 的媒体服务 SDK 可实现重试逻辑,用于处理与异常和错误相关的暂时性故障,引起这些异常和错误的原因包括 Web 请求、执行查询、保存更改和存储操作。 默认情况下,再次引发应用程序异常之前,用于 .NET 的媒体服务 SDK 将重试 4 次。 应用程序中的代码稍后必须正确处理此异常。

下面是 Web 请求、存储、查询和 SaveChanges 策略的简要原则:

  • 存储策略用于 Blob 存储操作(上传或下载资产文件)。
  • Web 请求策略用于泛型 Web 请求(例如,获取身份验证令牌和解析用户群集终结点)。
  • 查询策略用于查询 REST 中的实体(例如,mediaContext.Assets.Where(...))。
  • SaveChanges 策略用于执行服务中更改数据的任何操作(如创建实体、更新实体以及为操作调用服务函数)。

    本主题列出了用于 .NET 的媒体服务 SDK 的重试逻辑可处理的异常类型和错误代码。

异常类型

下表介绍了用于 .NET 的媒体服务 SDK 对于可能导致暂时性故障的操作可处理和不可处理的异常。

异常 Web 请求 存储 查询 SaveChanges
WebException
有关详细信息,请参阅 WebException 状态代码部分。
DataServiceClientException
有关详细信息,请参阅 HTTP 错误和状态代码
DataServiceQueryException
有关详细信息,请参阅 HTTP 错误和状态代码
DataServiceRequestException
有关详细信息,请参阅 HTTP 错误和状态代码
DataServiceTransportException
TimeoutException
SocketException
StorageException
IOException

WebException 状态代码

下表介绍了针对其实现重试逻辑的 WebException 错误代码。 WebExceptionStatus 枚举定义状态代码。

状态 Web 请求 存储 查询 SaveChanges
ConnectFailure
NameResolutionFailure
ProxyNameResolutionFailure
SendFailure
PipelineFailure
ConnectionClosed
KeepAliveFailure
UnknownError
ReceiveFailure
RequestCanceled
超时
ProtocolError
ProtocolError 的重试受控于 HTTP 状态代码处理。 有关详细信息,请参阅 HTTP 错误和状态代码

HTTP 错误状态代码

如果 Query 和 SaveChanges 操作引发 DataServiceClientException、DataServiceQueryException 或 DataServiceQueryException,则 StatusCode 属性中返回 HTTP 错误状态代码。 下表介绍了为哪些错误代码实现了重试逻辑。

状态 Web 请求 存储 查询 SaveChanges
401
403
处理等待时间较长的重试。
408
429
500
502
503
504

如果要查看用于 .NET 的媒体服务 SDK 的重试逻辑的实际实现,请参阅 azure-sdk-for-media-services