逻辑应用程序 - 通过 HTTP POST 大消息的最简单方法
Logic App - Easiest way to POST large message through HTTP
我有一个逻辑应用程序正在尝试 POST 向 HTTP 端点发送一条大消息,但出现错误:
有什么简单的方法可以增加超时时间吗?还是 POST 将大消息发送到 HTTP 端点的简单方法?
我知道默认限制:
我也试过分块,但还是一样的问题。
1. 也许您可以创建一个 Azure durable function 作为您的 Http 端点:
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.DurableTask;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
namespace FrankDurableFunction
{
public static class Function1
{
[FunctionName("Function1")]
public static async Task<List<string>> RunOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context)
{
var outputs = new List<string>();
// Replace "hello" with the name of your Durable Activity Function.
outputs.Add(await context.CallActivityAsync<string>("Function1_Hello", "Tokyo"));
//outputs.Add(await context.CallActivityAsync<string>("Function1_Hello", context.GetInput<ProcessRequest>()));
return outputs;
}
[FunctionName("Function1_Hello")]
public static string SayHello([ActivityTrigger] string name, ILogger log)
{
log.LogInformation($"Saying hello to {name}.");
Thread.Sleep(TimeSpan.FromMinutes(3));
return $"Hello {name}!";
}
[FunctionName("Function1_HttpStart")]
public static async Task<HttpResponseMessage> HttpStart(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestMessage req,
[DurableClient] IDurableOrchestrationClient starter,
ILogger log)
{
//ProcessRequest requestData = await req.Content.ReadAsAsync<ProcessRequest>();
// Function input comes from the request content.
//string instanceId = await starter.StartNewAsync("Function1", requestData);
string instanceId = await starter.StartNewAsync("Function1", null);
log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
var response = starter.CreateCheckStatusResponse(req, instanceId);
response.Headers.RetryAfter = new RetryConditionHeaderValue(TimeSpan.FromSeconds(10));
return response;
}
}
public class ProcessRequest
{
public string data { get; set; }
}
}
2. 为 Http
设置开启 Asynchronous Pattern
我测试了一下,结果好像没问题。
我有一个逻辑应用程序正在尝试 POST 向 HTTP 端点发送一条大消息,但出现错误:
有什么简单的方法可以增加超时时间吗?还是 POST 将大消息发送到 HTTP 端点的简单方法?
我知道默认限制:
我也试过分块,但还是一样的问题。
1. 也许您可以创建一个 Azure durable function 作为您的 Http 端点:
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.DurableTask;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
namespace FrankDurableFunction
{
public static class Function1
{
[FunctionName("Function1")]
public static async Task<List<string>> RunOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context)
{
var outputs = new List<string>();
// Replace "hello" with the name of your Durable Activity Function.
outputs.Add(await context.CallActivityAsync<string>("Function1_Hello", "Tokyo"));
//outputs.Add(await context.CallActivityAsync<string>("Function1_Hello", context.GetInput<ProcessRequest>()));
return outputs;
}
[FunctionName("Function1_Hello")]
public static string SayHello([ActivityTrigger] string name, ILogger log)
{
log.LogInformation($"Saying hello to {name}.");
Thread.Sleep(TimeSpan.FromMinutes(3));
return $"Hello {name}!";
}
[FunctionName("Function1_HttpStart")]
public static async Task<HttpResponseMessage> HttpStart(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestMessage req,
[DurableClient] IDurableOrchestrationClient starter,
ILogger log)
{
//ProcessRequest requestData = await req.Content.ReadAsAsync<ProcessRequest>();
// Function input comes from the request content.
//string instanceId = await starter.StartNewAsync("Function1", requestData);
string instanceId = await starter.StartNewAsync("Function1", null);
log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
var response = starter.CreateCheckStatusResponse(req, instanceId);
response.Headers.RetryAfter = new RetryConditionHeaderValue(TimeSpan.FromSeconds(10));
return response;
}
}
public class ProcessRequest
{
public string data { get; set; }
}
}
2. 为 Http
设置开启 Asynchronous Pattern
我测试了一下,结果好像没问题。