Точки останова, недоступные в функции Azure - PullRequest
0 голосов
/ 02 июля 2018

Я изучаю, как использовать функции Azure для обработки и ответа на SMS-сообщения, отправленные по номеру телефона Twilio. Для этого используется предварительная версия v2 Microsoft.Azure.WebJobs.Extensions.Twilio (3.0.0-beta5).

Я использую ngrok для пересылки http-триггера из Twilio через локальный сервер, который запускается при запуске функции Azure в режиме отладки из Visual Studio (2017).

Код, который я использую, очень прост, просто возвращает текстовое сообщение в ответ на все, что он получает:

public static class Function1
{
    [ FunctionName( "BikeSMS" ) ]
    public static IActionResult Run(
        [ HttpTrigger( AuthorizationLevel.Function, "get", "post", Route = null ) ]
        HttpRequest req,
        TraceWriter log
    )
    {
        log.Info( "C# HTTP trigger function processed a request." );

        var twiResp = new MessagingResponse();
        twiResp.Append( new Message( "This is Muddlehead. Thanx for your message" ) );

        return new ContentResult()
        {
            Content = twiResp.ToString(),
            ContentType = "application/xml"
        };
    }
}

Это отлично работает. Моя проблема в том, что я не могу заставить отладчик сломать что-либо внутри функции; точка останова просто игнорируется, и указанный текст возвращается.

Как настроить так, чтобы при вызове функции Azure включался отладчик? Есть ли какие-то настройки, которые мне нужно передать на локальный сервер, который запускается VS 2017, чтобы разместить / запустить функцию Azure?

Обновление

Мне удалось заставить отладчик VS остановиться на точках останова, но только после того, как вручную подключил VS к консольному приложению, на котором выполнялся локальный сервер функций Azure, запускаемый при нажатии клавиши F5.

Так что что-то не так в конфигурации или инструментах, потому что к чему бы ни подключался отладчик VS, когда вы нажимаете F5, это не то приложение.

Я не представляю это как ответ, потому что это не так. Мне не нужно заново подключать отладчик вручную.

Вот шаги, которые я использовал, чтобы заставить отладчик начать работать так, как он должен:

1) Запустите приложение-функцию Azure через F5 в режиме отладки. Откроется окно консоли для узла функции Azure.

2) Отладка -> Остановить отладку. Окно консоли, открытое в # 1, закроется, и появится новое окно консоли, на котором запущен узел функции Azure.

3) Присоедините отладчик VS к консольному приложению, открывшемуся в # 2 (в моем случае это называется «func.exe»).

Отладка теперь работает так, как вы ожидаете.

Дополнительная информация: я использую ConEMU как консольную оболочку по умолчанию в VS. Я не знаю, означает ли это что-нибудь, но консоль, которая открывается в # 1, является оболочкой ConEMU, но консоль, которая открывается в # 2, является простой старой оболочкой cmd.exe.

1 Ответ

0 голосов
/ 02 июля 2018

По-видимому, существует проблема с тем, как ConEMU принимает решение об открытии Window окон консоли по умолчанию в этой ситуации (об этой функции ConEMU можно прочитать в https://conemu.github.io/en/DefaultTerminal.html).

Отключение этой функции ConEMU - которая позволяет VS открывать обычную консоль Windows - решило проблему; Точки останова выполнялись в обычном режиме, без необходимости вручную подключаться к консоли, на которой запущен локальный хост функций Azure. Конечно, это означает, что я теряю ценность оболочек ConEMU, открывающихся внутри VS, но я могу с этим смириться. Я сообщу о проблеме команде ConEMU.

...