【问题标题】:Updating trigger frequency of Azure Logic App using API使用 API 更新 Azure Logic App 的触发频率
【发布时间】:2017-06-07 09:26:17
【问题描述】:

我正在尝试使用Azure Logic SDK 更新逻辑应用程序的重复频率和间隔,但失败并显示此错误消息

Microsoft.Rest.Azure.CloudException:不支持修补工作流“kk-test-logic-app”的请求。 属性对象内的所有字段都不能被修补。

这是一个代码 sn-p 显示我正在尝试做的事情。

    var workflow = await _client.Value.Workflows.GetAsync(resourceGroupName, workflowName);

    dynamic workflowDefinition = workflow.Definition;
    workflowDefinition.triggers[triggerName]["recurrence"] = JToken.FromObject(new { frequency = triggerFrequency, interval = triggerInterval });

    await _client.Value.Workflows.UpdateAsync(resourceGroupName, workflowName, workflow);

其中 _client 是 Lazy<LogicManagementClient>

这是我尝试更新的触发器的定义(使用 Fiddler):

  "triggers": {
    "When_a_new_email_arrives": {
      "recurrence": {
        "frequency": "Hour",
        "interval": 2
      },
      "splitOn": "@triggerBody()?.value",
      "type": "ApiConnection",
      "inputs": {
        "host": {
          "api": {
            "runtimeUrl": "https://logic-apis-southindia.azure-apim.net/apim/office365"
          },
          "connection": {
            "name": "@parameters('$connections')['office365']['connectionId']"
          }
        },
        "method": "get",
        "path": "/Mail/OnNewEmail",
        "queries": {
          "folderPath": "Inbox",
          "importance": "Any"
        }
      }
    }
  }

请注意,我能够成功检索工作流、workflowRuns、workflowTriggers 等。只有更新操作失败。关于如何使用 SDK 更新工作流属性的任何想法?

更新: 正如 Amor-MSFT 在下面的 cmets 中指出的那样,这是一个缺陷,作为一种解决方法,我目前使用的是 CreateOrUpdateAsync 而不是 UpdateAsync。已在 GitHub 中创建了 new defect,以引起 SDK 开发团队的注意。

【问题讨论】:

    标签: c# azure azure-logic-apps


    【解决方案1】:

    触发器当前每 30 秒执行一次,检查是否从某个电子邮件地址收到了新邮件并且是否按预期正常工作。我正在尝试使用我提供的代码将重复频率从 30 秒更改为 2 小时。

    我创建了一个邮件触发器,如果​​我使用调用 UpdateAsync 方法,我可以重现该问题。根据 Azure Logic C# SDK 的source code,它根据响应消息发送了一个不支持的 PATCH 请求。将 HTTP 方法更改为 PUT 后,我可以更新工作流。这是我用来发送 PUT 请求的示例代码。

    string triggerName = "When_a_new_email_arrives";
    string resourceGroupName = "my resourcegroup name";
    string workflowName = "my-LogicApp";
    string subscriptionID = "my-subscriptionID";
    var workflow = await _client.Workflows.GetAsync(resourceGroupName, workflowName);
    
    string url = string.Format("https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Logic/workflows/{2}?api-version=2016-06-01",
        subscriptionID, resourceGroupName, workflowName);
    HttpClient client = new HttpClient();
    HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Put, url);
    message.Headers.Add("Authorization", "Bearer put your token here");
    message.Headers.Add("Accept", "application/json");
    message.Headers.Add("Expect", "100-continue");
    
    dynamic workflowDefinition = workflow.Definition;
    workflowDefinition.triggers[triggerName]["recurrence"] = JToken.FromObject(new { frequency = "Minute", interval = 20 });
    
    string s = workflow.ToString();
    string workflowString = JsonConvert.SerializeObject(workflow, _client.SerializationSettings);
    
    message.Content = new StringContent(workflowString, Encoding.UTF8, "application/json");
    await client.SendAsync(message);
    

    【讨论】:

    • 触发器当前每 30 秒执行一次,检查是否从某个电子邮件地址收到了新邮件并且是否按预期正常工作。我正在尝试使用我提供的代码将重复频率从 30 秒更改为 2 小时。请注意,这只是我正在做的 POC,生产代码会有很大不同。
    • 不错的收获。感谢您指出源代码中的问题。查看CreateOrUpdateAsync,我可以看到 CreateOrUpdateAsync 使用 PUT HTTP 方法。更改我的代码以使用 CreateOrUpdateAsync 现在可以正确更新重复频率。
    • 很高兴听到您的问题已解决,请将有用的回复标记为答案。它将帮助其他人快速找到并解决类似的问题。
    • Github 中针对此缺陷创建了一个问题。
    猜你喜欢
    • 1970-01-01
    • 2021-08-14
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多