Intermittent 501 response from InvokeDeviceMethodAsync - Azure IoT

Viewed 265

InvokeDeviceMethodAsync is intermittently (and only recently) returning a status code of 501 within the responses (the response body is null).

I understand this means Not Implemented. However, the method IS implemented - in fact, it's the only method that is. The device is using Microsoft.Azure.Devices.Client (1.32.0-preview-001 since we're also previewing the Device Streams feature).

Setup, device side

This is all called at startup. After this, some invocations succeed, some fail.

var deviceClient = DeviceClient.CreateFromConnectionString(connectionDetails.ConnectionString, TransportType.Mqtt);

await deviceClient.SetMethodHandlerAsync("RedactedMethodName", RedactedMethodHandler, myObj, cancel).ConfigureAwait(true);

Call, server side

var methodInvocation = new CloudToDeviceMethod("RedactedMethodName")
{
  ResponseTimeout = TimeSpan.FromSeconds(60),
  ConnectionTimeout = TimeSpan.FromSeconds(60)
};

var invokeResponse = await _serviceClient.InvokeDeviceMethodAsync(iotHubDeviceId, methodInvocation, CancellationToken.None);

What have I tried?

  • Check code, method registration
  • Looking for documentation about 501: can't find any
  • Looking through the source for the libraries (https://github.com/Azure/azure-iot-sdk-csharp/search?q=501). Just looks like "not implemented", i.e. nothing registered
  • Turning on Distributed Tracing from the Azure portal, with sampling rate 100%. Waited a long time, but still says "Device is not synchronised with desired settings"
  • Exploring intellisense on the DeviceClient object. Not much there!

What next?

Well, I'd like to diagnose.

  • What possible reasons are there for the 501 response?
  • Are there and diagnostic tools, e.g. logging, I have access to?
1 Answers

It looks like, there is no response from the method within the responseTimeoutInSeconds value, so for test purpose (and the real response error) try to use a REST API to invoke the device method.

You should received a http status code described here.

Related