我有一个 Azure 函数应用程序,当它通过 ngrok 托管在开发机器上时,我可以创建一个 EventGrid 订阅,但完全相同的函数在发布到 Azure 时不会接受订阅。
错误是“验证提供的端点 <> 的尝试失败”。
我已经考虑了一些明显的事情,比如 url 的长度,但这似乎不是原因。两个 url 之间的唯一区别是主机,如函数应用程序的主机 url 和 ngrok 生成的主机。我已经尝试使用门户和 CLI 创建具有相同结果的订阅。
任何想法如何解决这一问题?
我有一个 Azure 函数应用程序,当它通过 ngrok 托管在开发机器上时,我可以创建一个 EventGrid 订阅,但完全相同的函数在发布到 Azure 时不会接受订阅。
错误是“验证提供的端点 <> 的尝试失败”。
我已经考虑了一些明显的事情,比如 url 的长度,但这似乎不是原因。两个 url 之间的唯一区别是主机,如函数应用程序的主机 url 和 ngrok 生成的主机。我已经尝试使用门户和 CLI 创建具有相同结果的订阅。
任何想法如何解决这一问题?
我在 powershell 中使用 Azure CLI 时遇到了同样的问题。对我来说,答案基本上是 Roman Kiss 的评论:转义端点 URL,因为它包含一个 & 符号。
例如,改变这个:
-endPoint "https://xxxx.azurewebsites.net/runtime/webhooks/EventGrid?FunctionName=xxxx&code=xxxxx"
对此:
-endPoint "https://xxxx.azurewebsites.net/runtime/webhooks/EventGrid?functionName=xxxx""&""code=xxxx"
它使用 ngrok 工作的原因是 ngrok 端点(指向本地开发功能主机)不需要 &code=xxxx 部分。
有两种 azure 函数触发器可用于事件网格订阅者,例如:
HttpTrigger
endpointUrl format = https://{functionApp}.azurewebsites.net/api/{functionName}?code={functionKey}
请注意,HttpTrigger 函数负责验证事件网格消息。在此处查看更多详细信息。
事件网格触发器
endpointUrl format = https://{functionApp}.azurewebsites.net/admin/extensions/EventGridExtensionConfig?functionName={functionName}&code={_masterKey}
看起来,您的端点不包含 url 查询字符串。
对此的答案是在访问云中的 EventGrid 订阅者时包含 code 参数,而不是在开发机器上。详细信息在这里。 https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-grid#create-a-subscription
上面的文本,似乎是所有的文档,并没有说明这是特别需要的。