Я пытаюсь создать программу C# для вызова моего приложения Azure Logic, которое вызывает хранимую процедуру SQL Server, которая извлекает данные из таблицы. У меня работает приложение логики, я запускаю его со стороны Azure, и оно возвращает нужные мне данные.
Но запуск его со стороны кода вызывает проблемы. Я думаю, что это будет GET, поскольку я получаю данные, поэтому я попробовал
var response = await _client.GetAsync("LogicAppURL");
Моя функция настроена следующим образом, поэтому я тоже могу ее запустить
[FunctionName("RunLogicApp")]
public async Task RunAsync([HttpTrigger(AuthorizationLevel.Function, "get", Route = "RunLogicApp")] HttpRequest req, ILogger log)
{
// ....
}
Но Azure не может вернуться и сообщить, что ожидает POST для запуска этого приложения логики. Итак, я попробовал PostAsync
и могу получить обратно только код ответа 200.
Какую сторону мне нужно исправить: код C# или приложение логики?
Моя хранимая процедура — это просто идентификатор выбора, адрес электронной почты, значение из таблицы.
Я добавил и удалил ответ из приложения логики, поскольку оно, похоже, не дошло до него. Я изменил код состояния, который он должен отправлять, но он всегда отправляет 200. Рекомендуете ли вы добавить его?
У вас должен быть ответ, если вы хотите что-то вернуть. Как настроен ответ, настроили ли вы тело возврата для вывода активности хранимой процедуры? Вероятно, вам нужно показать больше вашего приложения логики, потому что мы не видим активности Response. У вас должна быть возможность протестировать приложение логики с помощью чего-то вроде Postman, чтобы убедиться, что оно возвращает то, что вы хотите.
Для триггеров HTTP приложения логики требуется команда POST. Вам также, вероятно, понадобится токен SAS, который вы можете получить, нажав на триггер в приложении логики. Это прикрепляется к URL-адресу как параметр запроса подписи.
https://yourlogicappuri/yourapp?sig=xxxxxxxxxxxxxxxxxx
Это то, что у меня есть в моем («LogicAppURL»).
@Оуэн, ок. Однако вы сказали, что используете GET. Попробуйте ПОСТ.
Когда я пытаюсь выполнить POST, я получаю только ответ 200, когда он возвращается, других данных нет. Каким должен быть мой HTTPContent, поскольку я ничего не отправляю в своем сообщении, await _client.PostAsync(LogicAppURL, HTTPContent));
@Оуэн, у меня такое чувство, что вы ищете это: Learn.microsoft.com/en-us/azure/connectors/… Я могу ошибаться, но я не думаю, что триггер HTTP-запроса способен возвращать данные, другие чем 200/202, указывая, что запрос принят.
@KonTheCat Он вернет данные, за исключением нескольких известных случаев.
@Оуэн, ты сказал, что это работает из браузера в Лос-Анджелесе. Нажмите F12, чтобы открыть инструменты разработки, включить захват сети, снова протестировать в браузере и проверить заголовки запросов и текст ответа. Есть ли данные в ответе? Это пост? Есть ли в запросе какие-либо заголовки, которые вам не хватает? Вы пытаетесь вызвать свою функцию, которая затем вызывает LA?
Какую сторону мне нужно исправить: код C# или приложение логики?
Чтобы получить данные из приложения Logic путем вызова кода C#, выполните следующую процедуру:
Design of Logic App:
body('Execute_stored_procedure_(V2)')?['resultsets']?['Table1']
Тогда c# code
:
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
namespace FunctionApp150
{
public class Function1
{
private readonly ILogger<Function1> _logger;
public Function1(ILogger<Function1> logger)
{
_logger = logger;
}
[Function("Function1")]
public async Task<IActionResult> RunAsync([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
var rithmock = new StringContent("{}", System.Text.Encoding.UTF8, "application/json");
using var rith_httpClient = new HttpClient();
var rithcl = await rith_httpClient.PostAsync("https://prod-16.eastus.logic.azure.com:443/workflows/be1cd/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=aW9E6zJ6V1LbWAR5w", rithmock);
var rith_proc_res = await rithcl.Content.ReadAsStringAsync();
Console.WriteLine(rith_proc_res);
return new OkObjectResult("Welcome to Azure Functions!");
}
}
}
Output:
Приложение логики (код под названием приложение логики и приложение логики вернули ответ):
Я надеюсь, что это решение даст вам минимальное изменение существующей реализации. Я думаю, для решения этой проблемы необходимо внести простые изменения в приложение Logic App.
Когда вы добавляете Http-запрос в качестве триггера по умолчанию с помощью Old Logic App Designer, глагол запроса по умолчанию будет POST, но не знаю, можно ли его изменить.
Вы можете изменить это на метод GET, выполнив следующие действия в OLD Logic App Designer.
Выбрать все новые параметры в действии Http приложения логики
Выберите глагол GET в поле со списком и сохраните его.
Теперь вашим методом по умолчанию будет GET.
Когда вы запустите это приложение логики и перейдете в историю выполнения, вы увидите, что оно использовало команду GET.
Есть ли у вашего приложения логики ответ HTTP, который возвращает данные из хранимой процедуры?