Code Monkey home page Code Monkey logo

Comments (6)

gmileka avatar gmileka commented on August 21, 2024

Based on investigation, the code creates the first chain of inner handlers correctly and sets the callback. However, within the call of SetDesiredPropretyUpdateCallback(), the code resets part of the chain without setting the callback again - so it gets lost.
We did a work around where we checked if the inner handler is present before creating a new one. This unblocked us.

from azure-iot-sdk-csharp.

gmileka avatar gmileka commented on August 21, 2024

Jasmine pointed me to the sample, and the problem is that I’m missing the explicit call to OpenAsync()

            Client = DeviceClient.CreateFromConnectionString(DeviceConnectionString, TransportType.Mqtt);
            Client.OpenAsync().Wait(); // <-- this is missing in my repro.
            Client.SetDesiredPropertyUpdateCallback(OnDesiredPropertyChanged, null).Wait();

Once I added this, things started to work.

This makes sense, because when I debugged SetDesiredPropertyUpdateCallback(), it ended-up calling OpenAsync(), and during that call the callback was lost. In other words, the code path for OpenAsync() does not expect the callbacks to be set, and overwrites them.

So, if SetDesiredPropertyUpdateCallback() is expected to handle the case where OpenAsync() hasn't been called yet - we might still have a bug.

from azure-iot-sdk-csharp.

jasmineymlo avatar jasmineymlo commented on August 21, 2024

The is a valid bug and SetDesiredPropertyUpdateCallback() is expected to handle the case where OpenAsync() hasn't been called. Fix is on the way. Thanks.

from azure-iot-sdk-csharp.

jasmineymlo avatar jasmineymlo commented on August 21, 2024

commit: ccd8bc9

from azure-iot-sdk-csharp.

olavt avatar olavt commented on August 21, 2024

I'm trying to run the sample (https://github.com/Azure/azure-iot-sdk-csharp/blob/master/device/samples/DeviceClientTwinMqttSample/Program.cs), but it crashes on:

Client.SetDesiredPropertyUpdateCallback(OnDesiredPropertyChanged, null).Wait();

Connecting to hub

Error in sample: System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.Azure.Devices.Client.Transport.TransportHandlerFactory.Create(IPipelineContext context)
at Microsoft.Azure.Devices.Client.DeviceClient.<>c__DisplayClass24_0.b__4(IPipelineContext ctx)
at Microsoft.Azure.Devices.Client.Transport.DefaultDelegatingHandler.EnsureInnerHandlerInitialized()
at Microsoft.Azure.Devices.Client.Transport.DefaultDelegatingHandler.get_InnerHandler()
at Microsoft.Azure.Devices.Client.Transport.DefaultDelegatingHandler.set_TwinUpdateHandler(TwinUpdateCallback value)
at Microsoft.Azure.Devices.Client.Transport.DefaultDelegatingHandler.set_TwinUpdateHandler(TwinUpdateCallback value)
at Microsoft.Azure.Devices.Client.Transport.DefaultDelegatingHandler.set_TwinUpdateHandler(TwinUpdateCallback value)
at Microsoft.Azure.Devices.Client.Transport.DefaultDelegatingHandler.set_TwinUpdateHandler(TwinUpdateCallback value)
at Microsoft.Azure.Devices.Client.DeviceClient.<>c__DisplayClass60_0.<b__0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.Azure.Devices.Client.TaskHelpers.d__17.MoveNext()

The only modification I did to the code was to set the connection string for my device on the form:

"HostName=<iothub_host_name>;DeviceId=<device_id>;SharedAccessKey=<device_key>"

using my real connection string for the device of course.

I'm using v1.2.2 of the Microsoft.Azure.Devices.Client

from azure-iot-sdk-csharp.

tameraw avatar tameraw commented on August 21, 2024

Fix provided in 1.2.3. Please let us know if still having issue.

from azure-iot-sdk-csharp.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.