Ken*_*y_I 5 .net c# azure azureservicebus azure-functions
我这里有默认的基于 C# 的 HTTP 触发器,我希望将数据“Hello Name”发送到服务总线主题(已创建)。我在门户网站上编码。
如何做到服务总线输出绑定?
这是行不通的。任何可用的帮助?
- 缺少处理服务总线的参考?
- 如何定义服务总线的连接?Functions.json 在哪里
- 如何向服务总线发送消息?
//This FunctionApp get triggered by HTTP and send message to Azure Service Bus
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace Company.Function
{
public static class HttpTriggerCSharp1
{
[FunctionName("HttpTriggerCSharp1")]
[return: ServiceBus("myqueue", Connection = "ServiceBusConnection")] // I added this for SB Output. Where to define.
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.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
string responseMessage = string.IsNullOrEmpty(name)
? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
: $"Hello, {name}. This HTTP triggered function executed successfully.";
return new OkObjectResult(responseMessage);
// I added this for SB Output
return responseMessage;
}
}
Run Code Online (Sandbox Code Playgroud)
}
首先,有两个绑定将数据发送到服务总线。首先是您所显示的,使用return
绑定,安装两个包后Microsoft.Azure.WebJobs.Extensions.ServiceBus
,WindowsAzure.ServiceBus
然后您将能够发送数据。你不能这样做,因为你的函数类型是IActionResult
并且你正在尝试返回string
(responseMessage)。
所以如果你想发送整个responseMessage
,return new OkObjectResult(responseMessage);
就可以了。结果如下图所示。
如果您想使用,return responseMessage;
请将方法类型更改为字符串,public static async Task<string> RunAsync
结果如下。
您可以参考下面的代码或此示例的另一个绑定。
[FunctionName("Function1")]
[return: ServiceBus("myqueue", Connection = "ServiceBusConnection")]
public static async Task RunAsync(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
[ServiceBus("myqueue", Connection = "ServiceBusConnection")] MessageSender messagesQueue,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
string responseMessage = string.IsNullOrEmpty(name)
? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
: $"Hello, {name}. This HTTP triggered function executed successfully.";
byte[] bytes = Encoding.ASCII.GetBytes(responseMessage);
Message m1 = new Message(bytes);
await messagesQueue.SendAsync(m1);
}
Run Code Online (Sandbox Code Playgroud)
如何定义服务总线的连接?Functions.json 在哪里
在本地,您应该在 中定义连接local.settings.jon
,您可以对连接使用任何名称,然后在绑定Connection
值中应该是您在 json 文件中设置的名称。由于你使用的是c#,所以你无法修改该function.json
文件,在debug文件夹中会有一个function.json文件。所以你只能改变代码中的绑定。
希望这可以帮助您,如果您还有其他问题,请随时告诉我。
归档时间: |
|
查看次数: |
4788 次 |
最近记录: |