【发布时间】:2021-07-22 16:24:37
【问题描述】:
InvokeDeviceMethodAsync 在响应中间歇性地(并且只是最近)返回状态代码 501(响应正文为空)。
我理解这意味着未实施。但是,该方法已实现 - 事实上,它是唯一的方法。该设备正在使用Microsoft.Azure.Devices.Client(1.32.0-preview-001,因为我们也在预览设备流功能)。
设置,设备端
这都是在启动时调用的。在此之后,一些调用成功,一些失败。
var deviceClient = DeviceClient.CreateFromConnectionString(connectionDetails.ConnectionString, TransportType.Mqtt);
await deviceClient.SetMethodHandlerAsync("RedactedMethodName", RedactedMethodHandler, myObj, cancel).ConfigureAwait(true);
调用,服务器端
var methodInvocation = new CloudToDeviceMethod("RedactedMethodName")
{
ResponseTimeout = TimeSpan.FromSeconds(60),
ConnectionTimeout = TimeSpan.FromSeconds(60)
};
var invokeResponse = await _serviceClient.InvokeDeviceMethodAsync(iotHubDeviceId, methodInvocation, CancellationToken.None);
我尝试了什么?
- 校验码,方法注册
- 查找有关 501 的文档:找不到任何文档
- 查看库的源代码 (https://github.com/Azure/azure-iot-sdk-csharp/search?q=501)。只是看起来像“未实施”,即没有任何注册
- 从 Azure 门户启用分布式跟踪,采样率为 100%。等了很久,还是提示“设备未与所需设置同步”
- 在
DeviceClient对象上探索智能感知。没有多少!
下一步是什么?
嗯,我想诊断一下。
- 501 响应有哪些可能的原因?
- 是否有诊断工具,例如记录,我可以访问吗?
【问题讨论】:
-
奖励:我刚刚尝试使用 Azure 门户调用该方法。第一个以 501 失败,第二个(一秒钟后)以 200 成功
-
看看我在stackoverflow.com/questions/56631201/… 中的回答,也可以帮助您解决问题以找出问题的一面等。Azure IoT Hub 测试仪可以很好地帮助您(包括设备流功能):codeproject.com/Articles/1173356/Azure-IoT-Hub-Tester
-
我的 GitHub 问题中的更多更新:github.com/Azure/azure-iot-sdk-csharp/issues/2122 另外:我设置的 Log Analytics 工作区显示一切正常,直到我们使用了设备流。然后,有时,我们会通过 ConnectionForcefullyClosedOnNewConnection (400027) 获得新连接和断开连接的良好循环。我可以验证我们没有再次运行 DeviceClient.CreateFromConnectionString,也没有再次运行 SetMethodHandlerAsync,也没有使用/创建不同的 DeviceClient。只有一个实例在运行。
-
您能否使用 TransportType.Amqp 验证此问题?
-
你确定,你的方法处理程序没有抛出异常,包括检查响应负载中的 json 格式文本吗?
标签: azure azure-iot-hub