Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在使用到服务总线的输出绑定的azure函数中记录错误?_C#_.net_Azure Functions - Fatal编程技术网

C# 如何在使用到服务总线的输出绑定的azure函数中记录错误?

C# 如何在使用到服务总线的输出绑定的azure函数中记录错误?,c#,.net,azure-functions,C#,.net,Azure Functions,我有一个azure函数,它使用输出绑定将消息发送到服务总线主题。如果消息未能添加到服务总线,但只有在内置重试失败后,我才需要记录自定义数据。问题是,我不确定在哪里写这样的日志语句?以下情况是否可以接受?我的猜测是,这将在重试策略失败之前记录错误,因此,如果出现暂时性错误,将为每次重试执行下面的日志记录语句 [FunctionName("MessageLoader")] [return: ServiceBus("%Topic_Name%", Connecti

我有一个azure函数,它使用输出绑定将消息发送到服务总线主题。如果消息未能添加到服务总线,但只有在内置重试失败后,我才需要记录自定义数据。问题是,我不确定在哪里写这样的日志语句?以下情况是否可以接受?我的猜测是,这将在重试策略失败之前记录错误,因此,如果出现暂时性错误,将为每次重试执行下面的日志记录语句

[FunctionName("MessageLoader")]
[return: ServiceBus("%Topic_Name%", Connection = "Topic_Connection")]
public static async Task<TopicMessage> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "domain/load-message")] HttpRequestMessage req)
{
    try
    {
        var stringRequestBody = await req.Content.ReadAsStringAsync();
        return JsonConvert.DeserializeObject<TopicMessage>(stringRequestBody);
    }
    catch
    {
        _log.LogError("Could not send message: " + customBusinessObject.custom_message"); }
    }
}
[FunctionName(“MessageLoader”)]
[返回:ServiceBus(“%Topic\u Name%”,Connection=“Topic\u Connection”)]
公共静态异步任务运行(
[HttpTrigger(AuthorizationLevel.Function,“get”,“post”,Route=“domain/load message”)]HttpRequestMessage请求)
{
尝试
{
var stringRequestBody=wait req.Content.ReadAsStringAsync();
返回JsonConvert.DeserializeObject(stringRequestBody);
}
抓住
{
_log.LogError(“无法发送消息:+customBusinessObject.custom_消息”);}
}
}

如果您想在向服务总线主题发送输出时检查功能,那么您这边的输出绑定使用方式是错误的

在您的方式中,如果发送消息出错,它将转到catch中的逻辑。但是请注意,您仍然需要返回一些内容。因此,这种方式是不正确的

您不应使用输出绑定作为返回类型,请执行以下操作:

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 _20201012
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            [ServiceBus("bowman1012", Connection = "ServiceBusConnectionString1")] IAsyncCollector<dynamic> outputServiceBus,
            ILogger log)
        {
            try
            {
                await outputServiceBus.AddAsync("Item1");
            } catch {
                log.LogError("Could not send message: ...");
            }
            return new OkObjectResult(null);
        }
    }
}
使用系统;
使用System.IO;
使用System.Threading.Tasks;
使用Microsoft.AspNetCore.Mvc;
使用Microsoft.Azure.WebJobs;
使用Microsoft.Azure.WebJobs.Extensions.Http;
使用Microsoft.AspNetCore.Http;
使用Microsoft.Extensions.Logging;
使用Newtonsoft.Json;
名称空间_20201012
{
公共静态类函数1
{
[功能名称(“功能1”)]
公共静态异步任务运行(
[HttpTrigger(AuthorizationLevel.Function,“get”,“post”,Route=null)]HttpRequest请求,
[ServiceBus(“Bowman 1012”,Connection=“ServiceBusConnectionString”)]IAsyncCollector outputServiceBus,
ILogger日志)
{
尝试
{
等待outputServiceBus.AddAsync(“Item1”);
}抓住{
LogError(“无法发送消息:…”;
}
返回新的OkObjectResult(空);
}
}
}

这种输出绑定用法不适合您的要求,请查看我的答案。问题是我的函数不返回IActionResult。它返回队列的消息。我应该返回什么而不是OkObjectResult(null)?空消息?