Обновление частоты срабатывания триггера приложения Azure Logic с помощью API

Я пытаюсь обновить частоту и интервал повторения приложения логики с помощью Azure Logic SDK, и он выдает это сообщение об ошибке

Microsoft.Rest.Azure.CloudException: запрос на исправление рабочего процесса «kk-test-logic-app» не поддерживается. Ни одно из полей внутри объекта свойств не может быть исправлено.

Вот фрагмент кода, показывающий, что я пытаюсь сделать.

    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 в комментариях ниже, это дефект, и в качестве временного решения в настоящее время я использую CreateOrUpdateAsync вместо UpdateAsync. В GitHub был создан новый дефект, чтобы внимание команды разработчиков SDK.


person Karthikeyan    schedule 07.06.2017    source источник


Ответы (1)


В настоящее время триггер выполняет каждые 30 секунд проверку того, было ли получено новое письмо с определенного адреса электронной почты, и работает ли он должным образом. Я пытаюсь изменить частоту повторения с 30 до 2 часов, используя предоставленный мной код.

Я создал почтовый триггер и могу воспроизвести проблему, если использую метод invoke UpdateAsync. Согласно исходный код пакета SDK для Azure Logic C #, он отправляет запрос 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);
person Amor    schedule 08.06.2017
comment
В настоящее время триггер выполняет каждые 30 секунд проверку того, было ли получено новое письмо с определенного адреса электронной почты, и работает ли он должным образом. Я пытаюсь изменить частоту повторения с 30 до 2 часов, используя предоставленный мной код. Обратите внимание, что это только POC, который я делаю, и производственный код будет сильно отличаться. - person Karthikeyan; 08.06.2017
comment
Хорошо поймал. Спасибо, что указали мне на проблему в исходном коде. Глядя на CreateOrUpdateAsync, я вижу, что CreateOrUpdateAsync использует HTTP-метод PUT. Изменение моего кода на использование CreateOrUpdateAsync теперь правильно обновляет частоту повторения. - person Karthikeyan; 09.06.2017
comment
Рад слышать, что ваша проблема решена, отметьте полезные ответы как ответ. Это поможет другим быстро найти и исправить подобную проблему. - person Amor; 09.06.2017
comment
Создал проблему для этого дефекта в Github. - person Karthikeyan; 09.06.2017