我正在学习如何使用Azure Functions处理并响应通过Twilio电话号码提交的短信消息。这是使用Microsoft.Azure.WebJobs.Extensions.Twilio(3.0.0-beta5)的预览v2版本。
我使用ngrok来将来自Twilio的http触发器转发到本地服务器,当我从Visual Studio(2017)中启动Azure Function进行调试时,该服务器会启动。
我使用的代码非常简单,只是返回一个文本消息以响应其接收到的任何内容:
这个代码是没问题的。我的问题在于我无法让调试器停在函数内部任何断点上; 断点被忽略了,只返回指定的文本。
我该如何配置才能让 Azure Function 调用时调试器介入呢?我需要传递一些设置到VS2017启动的本地服务器中,以便托管/运行 Azure Function吗?
更新
我能够使 VS 调试器停止在断点上,但只有手动将 VS 附加到运行本地 Azure Function 服务器的控制台应用程序后才行。
因此,在配置或工具方面出了问题,因为当你按 F5 时,无论 VS 调试器附加到什么,它都不是正确的应用程序。
我没有将此提交为答案,因为它并不是。我不应该手动重新附加调试器。
以下是我用来使调试器开始正常工作的步骤:
1) 以调试模式通过F5启动Azure Function应用程序。Azure Function 主机的控制台窗口会打开。
2) Debug -> Stop Debugging。#1 中打开的控制台窗口关闭,然后出现一个新的运行 Azure Function 主机的控制台窗口。
3) 将 VS 调试器附加到#2中打开的控制台应用程序(在我的情况下称为“func.exe”)。
调试现在像你期望的那样工作了。
附加信息:我在 VS 中使用 ConEMU 作为我的默认控制台 shell。我不知道它是否有什么意义,但是#1 中打开的控制台是一个 ConEMU shell,而#2 中打开的控制台则是一个普通的 cmd.exe shell。
我使用ngrok来将来自Twilio的http触发器转发到本地服务器,当我从Visual Studio(2017)中启动Azure Function进行调试时,该服务器会启动。
我使用的代码非常简单,只是返回一个文本消息以响应其接收到的任何内容:
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 Function 调用时调试器介入呢?我需要传递一些设置到VS2017启动的本地服务器中,以便托管/运行 Azure Function吗?
更新
我能够使 VS 调试器停止在断点上,但只有手动将 VS 附加到运行本地 Azure Function 服务器的控制台应用程序后才行。
因此,在配置或工具方面出了问题,因为当你按 F5 时,无论 VS 调试器附加到什么,它都不是正确的应用程序。
我没有将此提交为答案,因为它并不是。我不应该手动重新附加调试器。
以下是我用来使调试器开始正常工作的步骤:
1) 以调试模式通过F5启动Azure Function应用程序。Azure Function 主机的控制台窗口会打开。
2) Debug -> Stop Debugging。#1 中打开的控制台窗口关闭,然后出现一个新的运行 Azure Function 主机的控制台窗口。
3) 将 VS 调试器附加到#2中打开的控制台应用程序(在我的情况下称为“func.exe”)。
调试现在像你期望的那样工作了。
附加信息:我在 VS 中使用 ConEMU 作为我的默认控制台 shell。我不知道它是否有什么意义,但是#1 中打开的控制台是一个 ConEMU shell,而#2 中打开的控制台则是一个普通的 cmd.exe shell。