如何解决在 Azure Durable Function 上调用 CreateCheckStatusResponse 时,Azurite 的结果与 Azure 存储模拟器不同
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 举报,一经查实,本站将立刻删除。