资源创建的 Azure 应用服务超时
Azure App Service Timeout for Resource creation
我的 Azure 应用服务上的 Web 应用及其超时有问题。它提供了一个 API 在 Azure 资源组中创建 CosmosDB 实例。由于创建需要很长时间(约 5 分钟),应用服务超时(230 秒)迫使应用 return HTTP 响应 500,而 CosmosDB 创建成功。在该方法中,创建资源,然后对其执行一些操作。
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应该是发送请求后立即return数据是合理的。如果在我们的api中,需要等待SDK中的异步或同步回调结果,然后return数据,肯定需要很长时间,所以设计不合理。
所以我的建议是用restapi来实现你的需求
创建(使用Database Accounts - Create Or Update)
数据库帐户创建或更新操作将异步完成。
检查属性中的 provisioningState (use Database Accounts - Get)
如果provisioningState
为Succeeded
,则可知资源已创建成功
如果想达到和portal一样的效果,建议加一个timer来获取provisioningState的状态值。
我的 Azure 应用服务上的 Web 应用及其超时有问题。它提供了一个 API 在 Azure 资源组中创建 CosmosDB 实例。由于创建需要很长时间(约 5 分钟),应用服务超时(230 秒)迫使应用 return HTTP 响应 500,而 CosmosDB 创建成功。在该方法中,创建资源,然后对其执行一些操作。
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应该是发送请求后立即return数据是合理的。如果在我们的api中,需要等待SDK中的异步或同步回调结果,然后return数据,肯定需要很长时间,所以设计不合理。
所以我的建议是用restapi来实现你的需求
创建(使用Database Accounts - Create Or Update)
数据库帐户创建或更新操作将异步完成。
检查属性中的 provisioningState (use Database Accounts - Get)
如果
provisioningState
为Succeeded
,则可知资源已创建成功如果想达到和portal一样的效果,建议加一个timer来获取provisioningState的状态值。