微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Azure Durable Function 上调用 CreateCheckStatusResponse 时,Azurite 的结果与 Azure 存储模拟器不同

如何解决在 Azure Durable Function 上调用 CreateCheckStatusResponse 时,Azurite 的结果与 Azure 存储模拟器不同

我有一个 Azure Durable 函数,如下所示:

import hashlib

x1 = "xyz SAMPLE Text XX 12345"
x2 = "Text XX and XX"


def replace_with_ignore(s,replace_dict,ignore_lst=[]):
    ignore_hash_d = {i: hashlib.sha1(i.encode()).hexdigest() for i in ignore_lst}
    for k,v in replace_dict.items():
        r = replace_dict[k]
        ignore_contains_set = set([i for i in ignore_lst if k in i])
        ignore_contains_list = sorted(list(ignore_contains_set),key=lambda x: len(x),reverse=True)
        for ic in ignore_contains_list:
            s = s.replace(ic,ignore_hash_d[ic])
        s = s.replace(k,r)
        for ic in ignore_contains_list:
            s = s.replace(ignore_hash_d[ic],ic)
    return s


print(replace_with_ignore(x1,{'XX': 'YY'}))
# xyz SAMPLE Text YY 12345
print(replace_with_ignore(x1,{'XX': 'YY'},['Text XX']))
# xyz SAMPLE Text XX 12345
print(replace_with_ignore(x2,{'XX': 'YY'}))
# Text YY and YY
print(replace_with_ignore(x2,['Text XX']))
# Text XX and YY

在最后一行中,对 [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); } 调用在 Azure 存储模拟器中按预期返回 HTTP 202,并且持久函数执行并得到预期结果。

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

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

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

使用 .NETCore 3.1
Azure 函数 V3

解决方法

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

只需添加以下配置:

WEBSITE_HOSTNAME=localhost:30042

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。