在.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