我有一个Azure Function应用程序,当它通过ngrok托管在开发计算机上时,可以创建EventGrid订阅,但是当发布到Azure时,完全相同的功能将不接受订阅。
错误是“尝试验证提供的端点<>失败”。
我已经考虑了一些明显的问题,例如url的长度,但这似乎不是原因。这两个网址之间唯一的区别是主机(如功能应用程序的主机网址)和ngrok生成的主机。我尝试使用门户和CLI创建具有相同结果的订阅。
有什么办法解决这个问题吗?
答案 0 :(得分:1)
在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部分。
答案 1 :(得分:0)
有两种可用于事件网格订阅者的天蓝色函数触发器,例如:
HttpTrigger
endpointUrl format = https://{functionApp}.azurewebsites.net/api/{functionName}?code={functionKey}
请注意,HttpTrigger函数负责验证事件网格消息。查看更多详细信息here。
EventGridTrigger
endpointUrl format = https://{functionApp}.azurewebsites.net/admin/extensions/EventGridExtensionConfig?functionName={functionName}&code={_masterKey}
看起来,您的端点不包含url查询字符串。
答案 2 :(得分:0)
对此的答案是在访问云中而不是开发机器上的EventGrid订户时包括code参数。详细信息在这里。 https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-grid#create-a-subscription
以上内容(似乎是所有文档的内容)未声明明确要求这样做。