我们有一个基于Azure的ASP.NET Web服务,可访问Azure KeyVault。我们看到了两个实例,其中第一次尝试将方法“挂起”,然后在大约一分钟后起作用。
在两种情况下,都会发生KeyVault访问。在这两种情况下,当我们开始在这些方法中使用KeyVault时,问题就开始了。
我们在第一个实例中进行了非常仔细的记录,并且看不到代码中可能导致挂起的任何其他内容。 KeyVault访问是主要的可疑对象。
此外,如果我们从本地服务器(从Visual Studio)运行该应用程序,则KeyVault访问在“首次尝试”中可以正常运行。仅当它在Azure上的生产环境中运行时,才产生“挂起”错误,并且仅在该“首次尝试”中产生。
“挂起”是指在一个实例中,它是由外部API触发的,至少需要60秒(我们可以知道这是因为外部API超时)。一个页面请求,可能要经过几分钟,页面才会旋转,这时我们认为数据库请求或其他请求已超时。
当我说“一分钟左右”时,这与我们设定的重试时间一样快。
是否存在某种问题或功能,需要对KeyVault进行“预热”才能使其首次尝试工作?
更新:我正在更仔细地查看代码,并且至少看到几个地方可以插入更多日志记录,以更准确地了解发生故障的位置。我要这样做,然后我将在这里报告。
更新:请参见下面的答案-主要的新手错误,已得到纠正。
答案 0 :(得分:0)
根据您的描述,似乎是由于WebApp 未启用始终启用。
默认情况下,如果网络应用闲置了一段时间,则会卸载。这样可以节省系统资源。在“基本”或“标准”模式下,您可以启用“始终开启”以始终保持应用程序加载
如果可能,请尝试启用Always on,然后重试。
答案 1 :(得分:0)
找到了问题和解决方案。
由于存在数秒的延迟,因此需要从异步任务中调用Key Vault访问。
private async Task<string> GetKeyVaultSecretValue(varSecretParms) {
我不了解底层技术,但是,显然,如果调用来自标准代码序列,则服务器不喜欢等待,因此线程被放弃/暂停。