Как заставить .Net Core EventHubClient.CreateFromConnectionString работать на концентраторе IoT Azure без адреса sb: // - PullRequest
0 голосов
/ 01 ноября 2018

В стандарте .Net 4.x вы подключаетесь к концентратору событий (чтобы получать сообщения с ваших устройств) следующим образом:

var connectionstring = "HostName=hubname.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=xxxxxxx";    
var eventHubClient = EventHubClient.CreateFromConnectionString(connectionstring, "messages/events");

В ядре .Net. CreateFromConnectionString принимает только один параметр. Тот же код выглядит так:

var connectionstring = "HostName=hubname.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=xxxxxxx";    
        var builder = new EventHubsConnectionStringBuilder(connectionstring) { EntityPath = "messages/events" };
        var eventHubClient = EventHubClient.CreateFromConnectionString(builder.ToString());

Однако, когда я делаю это, я получаю исключение (System.ArgumentException: 'Недопустимое имя параметра строки подключения' HostName ''). Единственный способ заставить его работать, это получить адрес конечной точки из центра IoT Azure и использовать его в коде, подобном следующему:

var endpointaddress = "Endpoint=sb://ihsuprodamres12345namespace.servicebus.windows.net/;SharedAccessKeyName=iothubowner;SharedAccessKey=xxxxxxx;EntityPath=iothub-ehub-hostname-914420-faa6fa4523";
var eventHubClient = EventHubClient.CreateFromConnectionString(endpointaddress);

Теперь большой вопрос. Как я могу заставить его работать без строки подключения sb: // и использовать только стандартную строку подключения? Что мне не хватает? Кто-нибудь может предоставить какой-нибудь стандартный код .Net Core 2.x, который подключается к IoT Hub и читает сообщения без необходимости использовать специальную строку конечной точки sb: //? Я хочу избежать необходимости хранить и то и другое, если в этом нет необходимости (обычная строка подключения используется устройствами для загрузки данных в концентратор). И так как это возможно в стандартном .Net, это должно быть возможно и в ядре .Net. Из командной строки я могу получить информацию для строки подключения, выполнив эти команды, поэтому, если я должен использовать sb: // url, могу ли я использовать c # и IoT Hub API получить эту информацию?

az iot hub show --query properties.eventHubEndpoints.events.endpoint --name HostName
az iot hub show --query properties.eventHubEndpoints.events.path --name HostName
az iot hub policy show --name iothubowner --query primaryKey --hub-name HostName
...