Маршрутизация данных JSON в концентраторы событий в Azure - PullRequest
0 голосов
/ 15 мая 2018

У меня есть ситуация, когда мне нужно отправить данные JSON (файл JSON, а не конвертировать в JSON) в Insight Time Series через концентраторы событий.Но я не могу отправить данные из-за недостатка опыта в C #.

Я могу отправлять другие примеры сообщений, но не JSON.Как я могу это сделать?

Буду признателен за любую помощь или понимание.

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;
using System.IO;
using Microsoft.ServiceBus.Messaging;

namespace ConsoleApp5
{
    class Program
    {
        static string _connectionString = "Endpoint..;

        static async Task MainAsync(string[] args)
        {
            var client = EventHubClient.CreateFromConnectionString(_connectionString, "eventhub");
            var json = File.ReadAllText(@"C:\Users\Shyam\Downloads\personal.json");
            var eventData = new EventData(Encoding.UTF8.GetBytes(json));
            await EventHubClient.SendAsync(eventData);

        }
    }
}

Это выдает ошибку в асинхронном методе.

Код серьезности Описание Файл проектаОшибка состояния подавления строки CS0120 Ссылка на объект требуется для нестатического поля, метода или свойства 'EventHubClient.SendAsync (EventData)' ConsoleApp5 C: \ Users \ Shyam \ source \ repos \ ConsoleApp5 \ ConsoleApp5 \ Program.cs 21 Active

ОБНОВЛЕНИЕ:

namespace jsonData
{
    using System;
    using System.Text;
    using System.IO;
    using System.Threading.Tasks;
    using Microsoft.Azure.EventHubs;

    public class Program
    {
        private static EventHubClient eventHubClient;
        private const string EhConnectionString = "Endpoint=sb://";
        private const string EhEntityPath = "hub";

        public static void Main(string[] args)
        {
            MainAsync(args).GetAwaiter().GetResult();
        }

        private static async Task MainAsync(string[] args)
        {
            // Creates an EventHubsConnectionStringBuilder object from the connection string, and sets the EntityPath.
            // Typically, the connection string should have the entity path in it, but this simple scenario
            // uses the connection string from the namespace.
            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));
            await eventHubClient.SendAsync(eventData);

            await eventHubClient.CloseAsync();


            Console.WriteLine("Press ENTER to exit.");
            Console.ReadLine();
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

JSON - это просто строка для концентраторов событий, такая простая, как

var json = File.ReadAllText("myfile.json");
var eventData = new EventData(Encoding.UTF8.GetBytes(json));
await eventHubClient.SendAsync(eventData);
0 голосов
/ 28 мая 2018

Я уверен, что вы уже поняли это, но проблема не в JSON, а в том, как вы используете клиент концентратора событий.

Вместо этой строки:

await EventHubClient.SendAsync(eventData);

должно быть так:

await client.SendAsync(eventData);
0 голосов
/ 15 мая 2018

Оберните ваши события в массив JSON:

using (var ms = new MemoryStream())
using (var sw = new StreamWriter(ms))
{
    // Wrap events into JSON array:
    sw.Write("[");
    for (int i = 0; i < events.Count; ++i)
    {
        if (i > 0)
        {
            sw.Write(',');
        }
        sw.Write(events[i]);
    }
    sw.Write("]");

    sw.Flush();
    ms.Position = 0;

    // Send JSON to event hub.
    EventData eventData = new EventData(ms);
    eventHubClient.Send(eventData);
}

Ссылка: docs.microsoft.com / time-series-insights-send-events

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...