在 Azure 持久函数上调用 CreateCheckStatusResponse 时,Azurite 未给出与 Azure 存储模拟器相同的结果

Posted

技术标签:

【中文标题】在 Azure 持久函数上调用 CreateCheckStatusResponse 时,Azurite 未给出与 Azure 存储模拟器相同的结果【英文标题】:Azurite not giving same results as Azure Storage Emulator when calling CreateCheckStatusResponse on Azure Durable Function 【发布时间】:2021-09-18 16:51:47 【问题描述】:

我有一个 Azure Durable 功能如下:

       [FunctionName("Function1_HttpStart")]
        public async Task<IActionResult> HttpStart(
        [HttpTrigger(AuthorizationLevel.Anonymous, "post")]
        HttpRequest req,
        [DurableClient] IDurableOrchestrationClient starter,
        ILogger log)
    
        
        //code to get requestBodyContent from req hidden

        var instanceId = await starter.StartNewAsync("MyOtherFunction", requestBodyContent);

        return starter.CreateCheckStatusResponse(req, instanceId);
     

在最后一行中,对 CreateCheckStatusResponse 的调用在 Azure 存储模拟器中按预期返回 HTTP 202,并且持久函数以预期结果执行。

当我在由函数容器和 Azurite 容器组成的 Docker 编排中运行相同的代码时,持久函数仍会以预期结果执行 CreateCheckStatusResponse 返回 HTTP 500。

我想了解为什么 HTTP 返回代码在 2 个不同的环境中表现不同。

AppInsights 没有显示任何问题。 读取the documentation 方法不应该返回 500,除非我们专门设置了第三个布尔参数。

使用 .NETCore 3.1 Azure 函数 V3

【问题讨论】:

【参考方案1】:

所以我能够找到解决方案 - 问题不是蓝晶石,这与 OP 无关。 在 docker 中托管持久函数时会出现此问题。 我在this post 中找到了答案。

只需添加以下配置:

WEBSITE_HOSTNAME=localhost:30042

【讨论】:

以上是关于在 Azure 持久函数上调用 CreateCheckStatusResponse 时,Azurite 未给出与 Azure 存储模拟器相同的结果的主要内容,如果未能解决你的问题,请参考以下文章

用于在运行之间存储函数应用状态的 Azure 持久实体 (.net 6)

使用依赖注入时未注册持久的 Azure 函数绑定类型

Azure 函数 - 防止多次调用

Azure上Linux虚拟机Mac地址的持久化

Azure上Linux虚拟机Mac地址的持久化

Azure 上 Linux 虚拟机 Mac 地址的持久化