如何获取.Net Core EventHubClient.CreateFromConnectionString以在没有sb://地址的Azure IoT中心上工作

时间:2018-11-01 14:21:11

标签: c# azure .net-core iot azure-iot-hub

在.Net standard 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')。使其正常工作的唯一方法是从Azure IoT中心获取端点地址,并在如下代码中使用它:

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中心并读取消息,而不必使用特殊的sb://端点字符串? 我想避免在不必要的情况下都存储两者(设备使用常规连接字符串将数据上传到集线器)。并且由于在标准.Net中是可行的,因此在.Net core中也必须可行。 通过运行这些命令,可以从命令行获取有关连接字符串的信息,因此,如果必须使用sb://网址,是否可以使用c#和IoT中心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

0 个答案:

没有答案