使用Service Bus绑定在本地开发Azure Functions时,可以使用HTTP请求向http://localhost:{port}/admin/functions/{function_name}
发送请求以测试功能
(请参见https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local上的非HTTP触发函数)。
在HTTP请求的正文中,可以发送以下内容以填充服务总线消息的正文:
{
"input": "<trigger_input>"
}
绑定到方法中的message.Body属性: 例如
public class TestServiceBusTrigger
{
[FunctionName("test-servicebus-trigger")]
public static void ProcessQueueMessage([ServiceBusTrigger("inputqueue")] Message message, TextWriter logger)
{
logger.WriteLine(message.Body);
}
}
如何在示例请求中填充message.UserProperties
。
当前使用以下版本:
答案 0 :(得分:0)
如您提到的文档所述,
消息正文必须具有以下JSON格式
{ "input":"<trigger_input>"}
。
您要实现的是模拟一个包含UserProperties字段的消息对象。显然,Json格式的字符串不符合此条件。在我的测试中,整个trigger_input始终被识别为消息正文。
通常来说(不使用管理端点),我们可以在触发器中声明其他参数以接收metadata。所以我尝试了管理端点,也没有用。看起来函数主机仅接受input
命名的字符串,尽管请求正文中有其他参数。
因此管理端点似乎是死胡同。您可以使用this code sample测试服务总线触发。
答案 1 :(得分:0)
如果您是在Visual Studio中进行开发,则可以在一个轻量级外观后面抽象实现,然后对实现进行单元测试。
答案 2 :(得分:0)
admin/functions
端点应该接收POST请求,其正文创建如下:
{
"input": "<your_whole_service_bus_message_serialized>"
}
因此,在发送请求时,您必须先序列化服务总线消息,然后再次序列化input
对象包装器。
如果您使用的是CSharp,则POST请求的内容应为:
var content = new StringContent(
JsonConvert.SerializeObject(new { input = JsonConvert.SerializeObject(sbMessage)}),
Encoding.UTF8,
"application/json"
);
您不需要消息包装对象,并且如果您的函数绑定参数是复杂类型,则可以仅发送序列化类型作为input
Json属性的值。