【Azure 应用服务】记一次 App Service 部分请求一直返回 401 "No Authority" 的情况

问题描述

发现部署在App Service上的 WCF 应用对于所请求的接口出现部分返回 401 - No Authority 消息,10次中有一次这样的概率。比较疑惑的问题是,应用没有更新,所以怀疑是App Service服务本身的问题? 

从本地的异常,错误消息,都没有明确的发现,也曾怀疑过网络导致的怪异问题,但是通过抓包并没有发现异常。以上判断都无法定位问题。 

本地异常:

   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at BC.TODO.Repository.Services.TODOHomeService.ITODOHomeService.AvailabilityCheckGetTasks(DateTime date, Guid guid)
   at BC.TODO.Repository.Services.TODOHomeService.TODOHomeServiceClient.AvailabilityCheckGetTasks(DateTime date, Guid guid) in C:\work\BC.TODO.Repository.Services\Service References\TODOHomeService\Reference.cs:line 28076
   at BC.TODO.Repository.Services.AvailabilityCheck.TODOAvailabilityCheckRepository.GetTasks(DateTime date, Guid guid) in C:\work\BC.TODO.Repository.Services\AvailabilityCheck\TODOAvailabilityCheckRepository.cs:line 45
   at BC.TODO.Domain.AvailabilityCheck.TODOAvailabilityCheckDomain.GetTasks(DateTime date, Guid guid) in C:\work\BC.TODO.Domain\AvailabilityCheck\TODOAvailabilityCheckDomain.cs:line 72
   at BC.TODO.Controllers.Data.TODO.AvailabilityCheckController.TaskList(SerachTaskModel model) in C:\work\BC.TODO.Controllers.Data\AvailabilityCheck\AvailabilityCheckController.cs:line 89

 

问题根源

最后,调查App Service的请求401的分布情况,倒推发现App Servcie中发布了两个部署槽(Slot), 其中一个是 staging环境,而这个环境中的认证与Product是不一样的,所以用Product的请求所携带的Authorization来访问Staging,就会出现401 No Authority的问题。 

【Azure 应用服务】记一次 App Service  部分请求一直返回 401 "No Authority" 的情况

进一步检查App Service 槽的部署情况,果然,发现两个槽之间的流量分布为90%, 10%。进一步的解释了从客户端调用WCF服务时候出现的10次之间一次出现401的问题。 通过修改部署槽之间的流量,问题完美解决。

PS: 这真是一次把”简单问题“复杂化的后果。

 

[完]

上一篇:docker-compose初体验


下一篇:Nancy异常01