没有输入的 Azure powershell 函数执行失败,因为输入不是 base-64
Azure powershell function with no input has failed execution because the input is not base-64
我有一个向 Azure 存储队列添加条目的过程。它像冠军一样工作。我 运行 代码,我可以看到队列中有一个条目,其中包含我期望的文本。
我有一个从队列中出列并处理条目的 Web 服务。我已将 Web 服务发布到 Azure 应用服务。 Web 服务响应 GET。它像冠军一样工作。我输入 URL 到 web 服务的方法。我可以看到 Web 服务完成后队列中的条目不存在,并且通过查看后端的结果我看到它们已按我预期的方式处理。
我想把它们绑在一起。当条目入队时,我希望 Web 服务启动。我想使用 Azure Function App。我创建了函数应用程序并使用门户向其添加了一个函数。我想要的功能触发器是在添加到存储队列的条目上。我使用排队项目的模板向应用程序 Powershell 7 添加了一个 powershell 函数。我用存储帐户的连接字符串填充了 AzureWebJobsSorage 应用程序设置。我到达 Code/Test。我将函数的内容替换为:
& Invoke-WebRequest -Uri https://[service].azurewebsites.net/path/to/the/web/method
在我桌上的 PWSH 终端中输入此行时,它符合我的预期。我期望的是我有一个 Azure 函数,它不需要任何参数,并且会在队列中有条目时发出 Web 请求。我想要的(C#-oid)函数签名是
void f() {...}
当我使用 Test/Run 按钮 运行 时,我得到一个错误,提示没有为 QueueIte.Stack 定义参数。正确的。来自框架的样本数据不相关,所以我可能认为将它不需要的参数传递给它似乎是例外。我在门户中看不到它是如何停止向它传递它不需要的参数的。
我通过 运行 对项目进行排队的过程进行了真实的尝试。我在监视器中收到错误报告“输入不是有效的 Base-64 字符串,因为它包含非 base-64 字符、超过两个填充字符或填充字符中的非法字符。”
函数框架似乎在以某种方式寻找输入,并且对它获得的输入感到失望,并且如果它获得了输入不知道如何处理。请帮助我理解如何让这个函数停止寻找输入。我错过了什么?
What I expect is that I have an Azure function that expects no
parameters and that will make a web request when an entry lands in the
queue.
如果我理解正确,您希望 Azure 函数在消息添加到队列时触发,但您不想对该消息执行任何操作(函数没有参数)。
如果是这种情况,那么不幸的是,这将行不通。基本上 Queue Triggered Function
背后的意图是您想要处理该消息。对于队列触发函数(或与此相关的任何 Azure 函数),您必须遵守 Azure 规则,因为您的方法签名必须与 Azure 函数运行时所期望的相匹配。
在您的函数代码中,您可以决定如何处理该消息。你甚至可以有一个空的函数体(即没有代码)。
此外,队列触发函数期望消息正文为 base64 encoded string
。您需要更改将消息写入队列的进程,以便将 base64 编码数据作为消息内容发送。
针对您的具体情况,我认为您的方法行不通。基本上,您会希望 Azure Function 在消息添加到队列时触发,但您会希望在 Web 应用程序中处理该消息。由于 2 个原因,这将不起作用:
- 如果 Function 执行成功,那么一旦 Function 终止,消息将被 Function runtime 从 Queue 中自动删除。
- 函数通过使消息出列以
Peek-Lock
模式获取消息。只要消息出队,其他消费者(例如您的 Web 应用程序)就无法使用它。因此,如果您的 Web 应用程序尝试读取该消息,它不会找到它。
您可以改为读取函数代码中的消息内容,然后 post 将消息内容发送到您的 Web 应用程序,然后它可以使用它。
我有一个向 Azure 存储队列添加条目的过程。它像冠军一样工作。我 运行 代码,我可以看到队列中有一个条目,其中包含我期望的文本。
我有一个从队列中出列并处理条目的 Web 服务。我已将 Web 服务发布到 Azure 应用服务。 Web 服务响应 GET。它像冠军一样工作。我输入 URL 到 web 服务的方法。我可以看到 Web 服务完成后队列中的条目不存在,并且通过查看后端的结果我看到它们已按我预期的方式处理。
我想把它们绑在一起。当条目入队时,我希望 Web 服务启动。我想使用 Azure Function App。我创建了函数应用程序并使用门户向其添加了一个函数。我想要的功能触发器是在添加到存储队列的条目上。我使用排队项目的模板向应用程序 Powershell 7 添加了一个 powershell 函数。我用存储帐户的连接字符串填充了 AzureWebJobsSorage 应用程序设置。我到达 Code/Test。我将函数的内容替换为:
& Invoke-WebRequest -Uri https://[service].azurewebsites.net/path/to/the/web/method
在我桌上的 PWSH 终端中输入此行时,它符合我的预期。我期望的是我有一个 Azure 函数,它不需要任何参数,并且会在队列中有条目时发出 Web 请求。我想要的(C#-oid)函数签名是
void f() {...}
当我使用 Test/Run 按钮 运行 时,我得到一个错误,提示没有为 QueueIte.Stack 定义参数。正确的。来自框架的样本数据不相关,所以我可能认为将它不需要的参数传递给它似乎是例外。我在门户中看不到它是如何停止向它传递它不需要的参数的。
我通过 运行 对项目进行排队的过程进行了真实的尝试。我在监视器中收到错误报告“输入不是有效的 Base-64 字符串,因为它包含非 base-64 字符、超过两个填充字符或填充字符中的非法字符。”
函数框架似乎在以某种方式寻找输入,并且对它获得的输入感到失望,并且如果它获得了输入不知道如何处理。请帮助我理解如何让这个函数停止寻找输入。我错过了什么?
What I expect is that I have an Azure function that expects no parameters and that will make a web request when an entry lands in the queue.
如果我理解正确,您希望 Azure 函数在消息添加到队列时触发,但您不想对该消息执行任何操作(函数没有参数)。
如果是这种情况,那么不幸的是,这将行不通。基本上 Queue Triggered Function
背后的意图是您想要处理该消息。对于队列触发函数(或与此相关的任何 Azure 函数),您必须遵守 Azure 规则,因为您的方法签名必须与 Azure 函数运行时所期望的相匹配。
在您的函数代码中,您可以决定如何处理该消息。你甚至可以有一个空的函数体(即没有代码)。
此外,队列触发函数期望消息正文为 base64 encoded string
。您需要更改将消息写入队列的进程,以便将 base64 编码数据作为消息内容发送。
针对您的具体情况,我认为您的方法行不通。基本上,您会希望 Azure Function 在消息添加到队列时触发,但您会希望在 Web 应用程序中处理该消息。由于 2 个原因,这将不起作用:
- 如果 Function 执行成功,那么一旦 Function 终止,消息将被 Function runtime 从 Queue 中自动删除。
- 函数通过使消息出列以
Peek-Lock
模式获取消息。只要消息出队,其他消费者(例如您的 Web 应用程序)就无法使用它。因此,如果您的 Web 应用程序尝试读取该消息,它不会找到它。
您可以改为读取函数代码中的消息内容,然后 post 将消息内容发送到您的 Web 应用程序,然后它可以使用它。