2017-06-07 30 views
0

我试图使用Azure Logic SDK更新逻辑应用的复发频率和间隔,并将其与该错误消息更新触发频率使用API​​

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>

这里是触发我想更新的定义(有使用招):

"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更新工作流属性的任何想法?

UPDATE: 由于在下面的评论中指出奥马尔-MSFT,这是一个缺陷,并作为一种解决方法,我目前使用的CreateOrUpdateAsync代替UpdateAsync。已在GitHub中创建了一个new defect,以使其得到SDK开发团队的关注。

回答

0

触发器当前每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); 
+0

触发器当前每30秒执行一次,检查是否收到来自某个电子邮件地址的新邮件,并且运行正常。我试图使用我提供的代码将重现频率从30秒改为2小时。请注意,这只是我正在做的POC,生产代码会有很大不同。 – Karthikeyan

+0

好的。感谢您在源代码中指出我的问题。看看[CreateOrUpdateAsync](https://github.com/Azure/azure-sdk-for-net/blob/psSdkJson6/src/SDKs/Logic/Management.Logic/Generated/WorkflowsOperations.cs#L729),我可以看到CreateOrUpdateAsync使用PUT HTTP方法。更改我的代码以使用CreateOrUpdateAsync现在正确地更新重复频率。 – Karthikeyan

+0

我很高兴听到您的问题已解决,请将有用的答复标记为答案。它会帮助其他人快速找到并解决类似的问题。 – Amor