用于资源创建的Azure应用服务超时

问题描述

我在Azure App Service上的Web应用程序及其超时存在问题。它提供了一个API,可在Azure资源组中创建CosmosDB实例。由于创建它需要花费大量时间(〜5分钟),因此在CosmosDB创建成功的同时,App Service超时(230秒)会强制App返回HTTP响应500。在该方法中,将创建资源,然后对该资源执行一些操作。

        ICosmosDBAccount cosmosDbAccount = azure.CosmosDBAccounts
                    .Define(cosmosdbname)
                    .WithRegion(Region.Europenorth)
                    .WithNewResourceGroup(resourceGroupName)
                    .WithDataModelsql()
                    .WithSessionConsistency()
                    .WithDefaultWriteReplication()
                    .Create();

        DoStuff(cosmosDbAccount);

由于我已经读到超时不能增加,是否有一种简单的方法来等待资源创建并获得成功的响应?

解决方法

从代码角度来看,您正在使用.net sdk来实现它。

the official SDK source code开始,我们应该很清楚源代码使用异步方法创建资源,并最终通过检测ProvisioningState的状态值来确定创建是否完成。

在webapp中,我们设计的api应该是发送请求后立即返回数据是合理的。如果在我们的api中,我们需要等待SDK中的异步或同步回调结果,然后返回数据,则该过程将花费很长时间,因此设计是不合理的。

所以我的建议是使用rest api来满足您的需求。

  1. 创建(使用Database Accounts - Create Or Update

    数据库帐户的创建或更新操作将异步完成。

    Check the response result.

  2. 检查属性(use Database Accounts - Get)中的ProvisioningState

    如果provisioningStateSucceeded,则可以知道资源已成功创建。

    如果要实现与门户网站相同的效果,建议添加一个计时器以获取ProvisioningState的状态值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...