Как вызвать одно приложение функции из другого локально? - PullRequest
1 голос
/ 14 февраля 2020

В Visual Studio я создал 2 Azure приложений функций f1 и f2.

Я уже изменил порт для обоих приложений функций.

Я хочу позвоните f2 из f1, но я получаю ошибку NotFound.

1 Ответ

1 голос
/ 14 февраля 2020

Я пытался вызвать one Function на Another Function в одном и том же проекте, и другой проект тоже отлично работает.

Функция 1 Пример:

 [FunctionName("Function1")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");
        try
        {
            //Extract Request Param

            var content = await new StreamReader(req.Body).ReadToEndAsync();
            QnAMakerQuestion objQnAMakerQuestion = JsonConvert.DeserializeObject<QnAMakerQuestion>(content);

            //Global Variable for containing message

            dynamic validationMessage;

            // Validate param

            if (string.IsNullOrEmpty(objQnAMakerQuestion.question))
            {
                validationMessage = new OkObjectResult("Question is required!");
                return (IActionResult)validationMessage;
            }
            //Selialize Request Param
            var json = JsonConvert.SerializeObject(objQnAMakerQuestion);
            var stringContent = new StringContent(json, UnicodeEncoding.UTF8, "application/json");
            // Call Function 2 
            HttpClient newClient = new HttpClient();
            HttpResponseMessage responseFromAnotherFunction = await newClient.PostAsync("http://localhost:7073/api/Function2FromApp2", stringContent);
            dynamic response = "";

            if (responseFromAnotherFunction.IsSuccessStatusCode)
            {
                response = responseFromAnotherFunction.Content.ReadAsStringAsync().Result;
            }

            validationMessage = new OkObjectResult(response);
            return (IActionResult)validationMessage;
        }
        catch (Exception ex)
        {
            dynamic validationMessage = new OkObjectResult(string.Format("Something went wrong, please try agian! Reason:{0}", ex.Message));
            return (IActionResult)validationMessage;
        }
    }

Пример функции 2:

  [FunctionName("Function2FromApp2")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            try
            {
                var content = await new StreamReader(req.Body).ReadToEndAsync();
                QnAMakerQuestion objQnAMakerQuestion = JsonConvert.DeserializeObject<QnAMakerQuestion>(content);

                //Global Variable for containing message

                dynamic validationMessage;

                // Validate param

                if (string.IsNullOrEmpty(objQnAMakerQuestion.question))
                {
                    validationMessage = new OkObjectResult("Question is required!");
                    return (IActionResult)validationMessage;
                }
                validationMessage = new OkObjectResult(objQnAMakerQuestion);
                return (IActionResult)validationMessage;
            }
            catch (Exception ex)
            {

                dynamic validationMessage = new OkObjectResult(string.Format("Something went wrong, please try agian! Reason:{0}", ex.Message));
                return (IActionResult)validationMessage;
            }
        }

Используемый класс:

   public class QnAMakerQuestion
    {
        public string question { get; set; }

    }

Примечание: Если вы запустите тот же проект, то у вас не возникнет никаких проблем. Но если вы работаете в другом проекте, возникает проблема с портом. Чтобы исправить это в файле local.settings.json, замените следующий код:

"Host": {

    "LocalHttpPort": 7073

  }

И Update Project Properties -> Debug to following

host start --port 7073 --pause-on-error См. Снимок экрана ниже:

enter image description here

Тест Post Man:

Я вызвал Function 1 в PostMan, который он вызвал Function 1 как Function 1 Вызывается Function 2 и отправлять ответ или наоборот от function 2 до function 1. См. Снимок экрана ниже:

enter image description here

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

...