问题描述
我在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来满足您的需求。
-
创建(使用Database Accounts - Create Or Update)
数据库帐户的创建或更新操作将异步完成。
-
检查属性(use Database Accounts - Get)中的ProvisioningState
如果
provisioningState
是Succeeded
,则可以知道资源已成功创建。如果要实现与门户网站相同的效果,建议添加一个计时器以获取ProvisioningState的状态值。