我正在学习如何使用Azure Functions处理和响应通过Twilio电话号码提交的SMS消息。这是使用Microsoft.Azure.WebJobs.Extensions.Twilio(3.0.0-beta5)的预览版v2。
我使用ngrok将来自Twilio的http触发器转发到本地服务器,当我从Visual Studio(2017)中以调试模式启动Azure函数时,该本地触发器将启动。
我使用的代码非常简单,只是返回一条短信以响应收到的任何内容:
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 Function服务器的控制台应用程序之后,该应用程序会在您按F5键时启动。
所以在配置或工具方面出了点问题,因为在您按F5键时VS调试器所附加的东西都不是正确的应用程序。
我没有提交此答案,因为不是。我不必手动重新连接调试器。
以下是我用来使调试器按照应有的方式开始工作的步骤:
1)在调试模式下通过F5启动Azure Function应用。将为Azure Function主机打开控制台窗口。
2)调试->停止调试。在#1中打开的控制台窗口关闭,并出现一个运行Azure Function主机的新控制台窗口。
3)将VS调试器附加到在#2中打开的控制台应用程序(在我的情况下称为“ func.exe”)。
调试现在可以按预期进行。
其他信息:我将ConEMU用作VS中的默认控制台外壳。我不知道这是什么意思,但是在#1中打开的控制台是ConEMU shell,但是在#2中打开的控制台是普通的cmd.exe shell。
答案 0 :(得分:16)
我没有ConEMU,但是我遇到了同样的问题-函数断点刚刚停止工作。此外,当我停止进程时,功能运行时控制台没有关闭,它早已关闭。在Visual Studio中运行。
该解决方案非常不直观:转到“工具->选项->调试”,然后取消选中“调试停止时自动关闭控制台”。此后,即使窗口仍未自动关闭,断点也重新开始工作。
答案 1 :(得分:1)
在这种情况下,ConEMU接管Window的默认控制台窗口的打开显然存在问题(您可以在https://conemu.github.io/en/DefaultTerminal.html上了解ConEMU的此功能)。
禁用此ConEMU功能(使VS打开普通的Windows控制台)解决了该问题;可以正常击断点,而不必附加到手动运行Azure Functions本地主机的控制台。当然,这意味着我失去了在VS中打开ConEMU外壳的价值,但我可以接受。我将向ConEMU团队报告问题。