Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当MQTTnet服务器未运行时,PublishAsync不会失败_C#_Mqtt - Fatal编程技术网

C# 当MQTTnet服务器未运行时,PublishAsync不会失败

C# 当MQTTnet服务器未运行时,PublishAsync不会失败,c#,mqtt,C#,Mqtt,我正在使用MQTTNet,一个用于从下面链接进行基于MQTT的通信的.NET库 我正在从下面的链接使用托管MQTT客户端 我有以下代码来将消息发布到MQTT服务器 var messagePayload = new MqttApplicationMessageBuilder() .WithTopic("Topic1") .WithPayloa

我正在使用MQTTNet,一个用于从下面链接进行基于MQTT的通信的.NET库

我正在从下面的链接使用
托管MQTT客户端

我有以下代码来
消息发布到
MQTT服务器

 var messagePayload = new MqttApplicationMessageBuilder()
                                      .WithTopic("Topic1")
                                      .WithPayload(message)
                                      .WithExactlyOnceQoS()
                                      .WithRetainFlag()
                                      .Build();

    try
    {
          await mqttClient.PublishAsync(messagePayload);                  
    }
    catch (Exception ex)
    {
         //Why I am not getting exception? 
    }

这种行为是通过MQTT托管客户机的设计实现的。它使用一个内部队列。在上发布的所有消息都将添加到此队列中,然后在该队列可用时发送到服务器。 它还确保消息不会丢失,即使应用程序重新启动,也可以重新发送消息。引用项目维基

一旦服务器可用,所有MQTT应用程序消息都将添加到内部队列并进行处理。 可以存储所有MQTT应用程序消息,以支持在应用程序重新启动后发送它们


这种行为是通过MQTT托管客户机的设计实现的。它使用一个内部队列。在上发布的所有消息都将添加到此队列中,然后在该队列可用时发送到服务器。 它还确保消息不会丢失,即使应用程序重新启动,也可以重新发送消息。引用项目维基

一旦服务器可用,所有MQTT应用程序消息都将添加到内部队列并进行处理。 可以存储所有MQTT应用程序消息,以支持在应用程序重新启动后发送它们


在这种情况下,我们如何向客户端发送消息传递状态?这将永远是成功!我是否必须查询终端系统是否收到了消息?在这种情况下,如果成功交付得到保证(最终一致性),我建议只向客户端返回消息确认。除非您担心服务器可用性是一种频繁且不可靠的情况。另一个选项可能是使用ManagedMQTClient类的ApplicationMessageProcessed事件等待成功处理,以向客户端发出消息已处理的信号。ApplicationMessageProcessed未触发。在这种情况下,我们如何向客户端发送消息传递状态?这将永远是成功!我是否必须查询终端系统是否收到了消息?在这种情况下,如果成功交付得到保证(最终一致性),我建议只向客户端返回消息确认。除非您担心服务器可用性是一种频繁且不可靠的情况。另一个选项可能是使用ManagedMQTClient类的ApplicationMessageProcessed事件等待成功处理,以向客户端发出消息已处理的信号。ApplicationMessageProcessed未触发。