none
求助!web应用中发送CloudToDevice消息失败 RRS feed

  • 问题

  • 我创建了一个web应用程序,然后写了一函数用于从Cloud发送消息给Device,如下所示。

    在web应用的Application_Start中调用此函数,模拟设备能够收到消息。

    但是在Controller中调用此函数,模拟设备就收不到消息。这是什么原因?

     private async Task SendCloudToDeviceMessageAsync()
     {
                string connectionString = "HostName=ttt.azure-devices.cn;SharedAccessKeyName=iothubowner;SharedAccessKey=benJRoV7sHebFxwKvAg1Y7m4gI9Hcsp2DBaEQ2j/+Oo=";
                ServiceClient serviceClient = ServiceClient.CreateFromConnectionString(connectionString);
                var commandMessage = new Message(Encoding.ASCII.GetBytes("Cloud to device message."));
                serviceClient.SendAsync("mySecondDevice", commandMessage);
      }


    2017年4月28日 5:08

全部回复

  • Hi,

    您此处用到的方法是通过 Azure IoT 中心 发送云端到设备的消息,这和您在项目何处调用应该没有多大关系,可以尝试通过 Debug 模式调试,确保该方法确实被调用了。

    您的 serviceClient 是在函数体内创建的,存在 SendAsync(...) 还没调用完成, serviceClient 已经超出生命周期销毁了,

    可以在 `serviceClient.SendAsync("mySecondDevice", commandMessage);` 前加上 await 关键字确保消息成功发送,

    另外,建议您将 serviceClient 作为成员变量来进行创建。

    参考:使用 IoT 中心 (.NET) 将消息从云发送到模拟设备


    MSDN 社区技术支持
    如果该回复解决了您的问题,请及时点击“标记为答案”选项,如未解决请选择“取消标记为答案”,这会有利于其他人员来阅读您的帖子。如果您对MSDN 技术支持有任何的建议或意见,请随时联系 MSDNFSF@microsoft.com

    2017年4月28日 8:57
    版主
  • 谢谢您的回复!

    我已经调试过,确定了 `serviceClient.SendAsync("mySecondDevice", commandMessage);`被调用到了。

    而且加上了await关键字。

    并且尝试了把serviceClient在函数外创建,作为成员变量也试过了。

    但是问题仍然没有解决, 还有什么更好的办法吗?

    2017年4月28日 9:47