You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#通过Event Hubs将JSON文件发送至Azure Time Series Insights

解决C#发送JSON到Azure Event Hubs的报错问题

先分析你最初代码的错误根源

你第一次写的代码触发CS0120错误,核心问题是调用实例方法时误用了类名而非对象实例:

await EventHubClient.SendAsync(eventData);

SendAsync是EventHubClient的实例方法,必须通过你创建的client对象来调用,而不是直接用EventHubClient类名调用。正确写法应该是:

await client.SendAsync(eventData);

你更新后的代码已经是正确的实现方向

你更新后的代码改用了最新的Microsoft.Azure.EventHubs包(替代旧的Microsoft.ServiceBus.Messaging),并且正确通过实例化的eventHubClient调用SendAsync,这个逻辑是没问题的。不过我可以给你补充几个关键注意事项,确保JSON能顺利发送到Event Hubs并被Azure Time Series Insights(TSI)正确解析:

  • 确认连接信息完全准确:

    • EhConnectionString需要是完整的Event Hubs命名空间连接字符串(包含SharedAccessKeyName和SharedAccessKey),不能只写sb://开头的部分。
    • EhEntityPath必须和你Azure门户中创建的Event Hub名称完全一致。
  • 确保JSON符合TSI的格式要求:

    • TSI需要每条消息包含时间戳字段(如果没有显式提供,会默认使用Event Hubs的消息入站时间)。
    • 如果你的TSI环境配置了Time Series ID,JSON里必须包含对应的字段,保证TSI能正确关联时序数据。
  • 添加异常处理便于调试:
    可以给发送逻辑加上try-catch块,捕获发送过程中可能出现的异常(比如网络故障、权限不足、JSON格式错误等),方便排查问题:

private static async Task MainAsync(string[] args)
{
    try
    {
        var connectionStringBuilder = new EventHubsConnectionStringBuilder(EhConnectionString)
        {
            EntityPath = EhEntityPath
        };
        eventHubClient = EventHubClient.CreateFromConnectionString(connectionStringBuilder.ToString());

        var json = File.ReadAllText(@"D:\Sample.json");
        var eventData = new EventData(Encoding.UTF8.GetBytes(json));
        
        // 可添加自定义属性,比如消息类型,方便后续TSI筛选
        eventData.Properties.Add("MessageType", "TSIData");
        
        await eventHubClient.SendAsync(eventData);
        Console.WriteLine("JSON消息发送成功!");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"发送失败:{ex.Message}");
    }
    finally
    {
        if (eventHubClient != null)
        {
            await eventHubClient.CloseAsync();
        }
    }

    Console.WriteLine("Press ENTER to exit.");
    Console.ReadLine();
}
  • 检查NuGet包依赖:
    确保你的项目已经安装了Microsoft.Azure.EventHubs NuGet包(可以通过NuGet包管理器搜索安装),旧的Microsoft.ServiceBus包已被弃用,不建议继续使用。

按照这些步骤调整后,你的代码应该能成功将JSON数据发送到Event Hubs,进而被TSI接收和处理。

内容的提问来源于stack exchange,提问作者Shyam V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:59:49