【问题标题】:Logic App - HTTP Action - Loop until 200逻辑应用程序 - HTTP 操作 - 循环直到 200
【发布时间】:2017-06-09 09:07:22
【问题描述】:

我有一个带有 http 操作的逻辑应用。 由于回复策略最多允许重试 4 次,我使用 http 状态码作为转义变量(直到 200)将活动放入一个 do-until 循环(具有最大计数和超时)。

这张图片应该更清楚

在运行时出现此错误

[编辑]无效模板。无法处理动作'HTTPAction'的模板语言表达式[编辑]:无法处理动作'HttpAction'的模板语言表达式[..]模板语言表达式'equals(outputs('HttpAction')['statusCode '], 200)' 无法评估,因为无法选择属性 'statusCode'。

有什么提示吗?

谢谢,亚历山德罗

[编辑]http请求正常工作(用提琴手试过),在工作流程中我想它只是由于模板错误而没有被执行(为什么它在运行时失败而不是在编辑模式下?)[编辑]

【问题讨论】:

  • 您的 HttpAction 可能会失败而没有生成输出。你可以试试语法 equals(outputs('HttpAction')?['statusCode'], 200)。
  • 您好,感谢您的提示。在我编辑时,错误指的是无效的模板。此外,如果我使用提琴手提出相同的请求,我会得到 200。
  • 如果你使用 actions('HttpAction').['statusCode'] 而不是输出会发生什么?
  • 谢谢,我试试看。考虑我使用 web gui 使用基本模式创建了“equals(outputs('HttpAction')['statusCode'], 200)”,并且不希望需要编码技能(对于其他用户)。此外,该表达式不会转换为基本模式编辑,从而使工作流条件的可读性降低
  • @equals(actions('HttpAction').['statusCode'], 200) 在保存“预期令牌'标识符'”时出错我使用了@equals(actions('CallClarifaiTags').statusCode , 200) 然后得到“无法处理动作'HttpAction'的模板语言表达式:'模板语言表达式'equals(actions('HttpAction').statusCode, 200)'不能被评估,因为属性'statusCode'没有存在”

标签: azure azure-logic-apps


【解决方案1】:

回复可读代码。 我刚刚做了一个快速 POC 来模拟你的场景,但我无法重现你的问题。

我的 Do-Until 代码:

"Until": {
            "actions": {
                "HttpGetMyValues": {
                    "inputs": {
                        "headers": {
                            "Ocp-Apim-Subscription-Key": "@parameters('OcpApimSubscriptionKey')"
                        },
                        "method": "GET",
                        "uri": "https://myendpointuri"
                    },
                    "runAfter": {},
                    "type": "Http"
                }
            },
            "expression": "@equals(outputs('HttpGetMyValues')['statusCode'], 200)",
            "limit": {
                "count": 1,
                "timeout": "PT1M"
            },
            "runAfter": {},
            "type": "Until"
        }

我可以毫无问题地保存和运行逻辑应用程序。

【讨论】:

  • 你使用了输出而不是操作
  • 是的,您在第一个示例中也是如此。我想我使用相同的方法仅使用设计器来设计 poc。设计师使用输出,这在我的情况下工作得很好。
  • 正如我所说,我无法重现它,不是在设计期间,也不是在运行时。您可以删除 DoUntil 并正常执行 HttpAction 吗?只是为了验证您得到的响应。此测试的输出可能解释了 dountil 失败的原因。
  • 我看到的唯一区别是方法(在我的情况下,它是一个带有正文的帖子)
  • 循环外的动作响应200/4xx/5xx。根据负载的不同,端点会以随意的 4xx/5xx 拒绝我,然后在重试后给我 200。这就是我想使用基于响应 statusCode 的循环的原因。
【解决方案2】:

重试策略是可配置的,目前只能通过代码视图获得,但我们计划很快在设计器中启用它。 Here's 文档。

"retryPolicy" : {
      "type": "<type-of-retry-policy>",
      "interval": <retry-interval>,
      "count": <number-of-retry-attempts>
    }

【讨论】:

  • 您好,问题是最大重试策略计数为 4
【解决方案3】:

我知道这对游戏来说已经很晚了,但错误是由于结束“do-until”循环的条件包含在循环本身中。您需要使用循环之外的值作为参考。我建议:

  1. 在“do-until”操作之前创建一个变量,默认值为“400”
  2. 使用变量作为“状态代码”值需要相等的值
  3. 在每次循环迭代结束时更新(逻辑应用中的设置变量)变量以等于“状态代码”。

【讨论】:

    【解决方案4】:

    在直到控件中:

    1. 点击编辑高级模式
    2. 将文本替换为@equals(actions('HTTPAction').status, 'Succeeded')
    3. 代码表示当 HTTPAction 完成时停止执行直到循环

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      • 2012-12-30
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-06
      相关资源
      最近更新 更多