Запустите хранимую процедуру SQL для ПОЛУЧЕНИЯ данных с помощью приложения логики

Я пытаюсь создать программу 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# или приложение логики?

Моя хранимая процедура — это просто идентификатор выбора, адрес электронной почты, значение из таблицы.

Есть ли у вашего приложения логики ответ HTTP, который возвращает данные из хранимой процедуры?

Scott Mildenberger 18.04.2024 20:31

Я добавил и удалил ответ из приложения логики, поскольку оно, похоже, не дошло до него. Я изменил код состояния, который он должен отправлять, но он всегда отправляет 200. Рекомендуете ли вы добавить его?

Owen 18.04.2024 20:48

У вас должен быть ответ, если вы хотите что-то вернуть. Как настроен ответ, настроили ли вы тело возврата для вывода активности хранимой процедуры? Вероятно, вам нужно показать больше вашего приложения логики, потому что мы не видим активности Response. У вас должна быть возможность протестировать приложение логики с помощью чего-то вроде Postman, чтобы убедиться, что оно возвращает то, что вы хотите.

Scott Mildenberger 18.04.2024 21:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
115
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Для триггеров HTTP приложения логики требуется команда POST. Вам также, вероятно, понадобится токен SAS, который вы можете получить, нажав на триггер в приложении логики. Это прикрепляется к URL-адресу как параметр запроса подписи.

https://yourlogicappuri/yourapp?sig=xxxxxxxxxxxxxxxxxx

Это то, что у меня есть в моем («LogicAppURL»).

Owen 18.04.2024 20:25

@Оуэн, ок. Однако вы сказали, что используете GET. Попробуйте ПОСТ.

Architect Jamie 18.04.2024 20:31

Когда я пытаюсь выполнить POST, я получаю только ответ 200, когда он возвращается, других данных нет. Каким должен быть мой HTTPContent, поскольку я ничего не отправляю в своем сообщении, await _client.PostAsync(LogicAppURL, HTTPContent));

Owen 18.04.2024 20:39

@Оуэн, у меня такое чувство, что вы ищете это: Learn.microsoft.com/en-us/azure/connectors/… Я могу ошибаться, но я не думаю, что триггер HTTP-запроса способен возвращать данные, другие чем 200/202, указывая, что запрос принят.

KonTheCat 18.04.2024 21:01

@KonTheCat Он вернет данные, за исключением нескольких известных случаев.

Architect Jamie 19.04.2024 01:21

@Оуэн, ты сказал, что это работает из браузера в Лос-Анджелесе. Нажмите F12, чтобы открыть инструменты разработки, включить захват сети, снова протестировать в браузере и проверить заголовки запросов и текст ответа. Есть ли данные в ответе? Это пост? Есть ли в запросе какие-либо заголовки, которые вам не хватает? Вы пытаетесь вызвать свою функцию, которая затем вызывает LA?

Architect Jamie 19.04.2024 01:25
Ответ принят как подходящий

Какую сторону мне нужно исправить: код 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.

  1. Выбрать все новые параметры в действии Http приложения логики

  2. Выберите глагол GET в поле со списком и сохраните его.

Теперь вашим методом по умолчанию будет GET.

Когда вы запустите это приложение логики и перейдете в историю выполнения, вы увидите, что оно использовало команду GET.

Другие вопросы по теме

Потоковая передача ответа в веб-API ASP.NET Core 6, работающем локально, но не в веб-приложении Azure, размещенном в Windows
Несколько хранилищ ключей Azure, связанных с одной и той же конфигурацией приложения, приводят к ошибке аутентификации в приложении весенней загрузки
Не удалось выполнить правильные действия по копированию данных контейнера BLOB-объектов в ADF в двух разных подписках в одном клиенте
В Applicaition Insights данные не отображаются
Создайте токен доступа для перечисления пользователей группы с помощью Graph Explorer или Postman
Сервер OAuth API Manager генерирует неверную заявку на аудиторию
Скопируйте данные общего доступа между подписками — здесь целевая подписка находится в виртуальной сети
Как получить размер ключа существующего ключа хранилища ключей Azure?
Как скопировать данные общего доступа между подписками учетных записей хранения — сценарий приведен в описании
Веб-приложение (Linux) — BadGateway/Запрещено — подписке не разрешено создавать или обновлять ферму серверов