是:“Iot Hub诊断azure部署的应用程序”
奇怪的问题。我有一个非常简单的基于4.5.2的webapi应用程序,它充当了一个现场网关;也就是说,每个方法代表消费者连接到IoT Hub,这些实际设备只能发布到HTTP端点。
当我从本地开发机器运行代码时,一切都按预期工作,我的IoT Hub接收数据。所以,然后,我将webapi应用程序发布到azure并运行相同的方法,但根本没有检测到IoT Hub的活动。奇怪的。我甚至在azure中调试应用程序代码,一切正常,没有错误。目前没有任何外部配置可以解决问题,这完全在代码中。
这种行为是否有合理的解释?
我是IoT Hub的新手,所以这可能是一件简单的事情。我在哪里可以打开详细诊断?由于我有相信的代码,我相信在哪里可以看到下一个逻辑信息?是否存在可能阻止数据通过的某种权限?
WebApi方法基本上调用此代码,该代码包含在单独的程序集中
public static void SendTempData(string Name, string value)
{
var telemetryDataPoint = new
{
deviceId = HOME_TEMP_DEVICE,
DeviceName = Name,
TValue = value
};
var messageString = JsonConvert.SerializeObject(telemetryDataPoint);
var task = Task.Run(() =>
{
deviceClient = DeviceClient.Create(iotHubUri, new DeviceAuthenticationWithRegistrySymmetricKey(HOME_TEMP_DEVICE, HOME_TEMP_DEVICE_KEY), TransportType.Mqtt);
var message = new Message(Encoding.ASCII.GetBytes(messageString));
deviceClient.SendEventAsync(message);
});
WaitForTask(ref task);
CheckForFail(task);
}
private static void WaitForTask(ref Task task)
{
while (task.Status != TaskStatus.RanToCompletion)
{
if ((task.IsCanceled) || (task.IsFaulted))
break;
System.Diagnostics.Debug.WriteLine("Thread ID: {0}, Status: {1}", Thread.CurrentThread.ManagedThreadId, task.Status);
}
}
底线是我没有可见性。是否有一些冗长的设置我可以启用,看看为什么IoTHub永远不会看到连接或数据?