Mqttnet больше не может подключаться к брокеру ⇐ C#

Место общения программистов C#
Anonymous
Mqttnet больше не может подключаться к брокеру

Сообщение Anonymous »

Итак, я разрабатываю приложение .NET 8.0 Blazor, которое использует MQTTNET для отправки некоторых данных в брокер Mosquitto (v2.0.21, который используется другим приложением (в основном только централизованное приложение, которое несколько клиентов посылали свои данные) < /p>
Теперь все хорошо подключилось к тому, что все было хорошо, и я был способным, но и последнее, но и последнее, но и последнее, но и последнее, но и последнее, но и последнее, но и последнее, но и последнее, но и последнее, но и последнее, но и последнее, что я не подключил к данным. Приложение, один клиент больше не может подключаться к брокеру. < /p>
Обновление не изменяет используемую версию MQTTNET (4.3.7.1207), ни версию .NET (все еще .NET 8). Код для обработки соединений MQTT также остается таким же. Другие случаи, которые были обновлены, все еще работают после обновления. (Debian 11, Docker на Debian 12 и коллекция других различных версий Windows)public MyMqttHandler
(
IOptions options,
ILogger logger
)
{
clientId = options.Value.ClientId;
statusTopic = $"{STATUS_PREFIX}/{clientId}";

clientOptions = GenerateClientOptions(options.Value);
client = new MqttFactory().CreateManagedMqttClient();

this.logger = logger;
}
}

//this is called at startup, as the class is registered in DI as an IHostedService
public async Task StartAsync(CancellationToken cancellationToken)
{
try
{
await client.StartAsync(clientOptions);
await client.SubscribeAsync($"{STATUS_PREFIX}/+", MqttQualityOfServiceLevel.AtMostOnce);
}
catch(OperationCanceledException canceledExcepion)
{
logger.LogWarning(canceledExcepion, "Unable to subscribe to all topics, as operation cancellation has been requested.");
await DisposeAsync();
throw;
}
}

private ManagedMqttClientOptions GenerateClientOptions(MyCustomOptionsObjectoptions)
{
MqttClientTlsOptions tlsOptions = new()
{
AllowUntrustedCertificates = false,
ClientCertificatesProvider = new DefaultMqttCertificatesProvider
(
options.CaFilePaths.ConvertAll(path => new X509Certificate2(path))
),
UseTls = true
};

MqttClientOptions clientOptions = new MqttClientOptionsBuilder()
.WithTcpServer(options.TcpServer, options.Port)
.WithCleanSession(true)
.WithTlsOptions(tlsOptions)
.WithClientId(options.ClientId)
.WithProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V500)
.WithCredentials(options.UserName, options.Password)
.WithWillTopic(statusTopic)
.WithWillPayload(BitConverter.GetBytes(false))
.WithWillUserProperty(UserProperties.SenderId, options.ClientId)
.WithUserProperty(UserProperties.SenderId, options.ClientId)
.WithWillRetain(true)
.Build();

return new ManagedMqttClientOptionsBuilder()
.WithClientOptions(clientOptions)
.Build();
}

< /code>
, потом, когда я хочу использовать клиента, я жду, пока что -то вставное свойство станет верным, чтобы отправить некоторые полезные нагрузки. Однако этого никогда не происходит, и тайм -аут (который установлен в 30 -х годах) достигается < /p>
TimeSpan timeoutSpan = TimeSpan.FromMilliseconds(timeout);
using var timeoutToken = new CancellationTokenSource(timeoutSpan);

while(!client.IsConnected)
{
if(timeoutToken.IsCancellationRequested)
throw new MqttCommunicationException(new TimeoutException("Client could not connect to broker in time."));
await Task.Delay(50, cancellationToken);
}
< /code>
Вещи, которые я пробовал: < /p>
  • Перезапуск брокера MQTT (в случае очистки, который, как я знаю, является чистым в V5, но он в любом случае устанавливает одно и то же свойство, ничего не делает, и есть разглашающая сеанс) - не повезло < /li>
    , настраиваемая обстановка. Luck < /li>
    Перезагрузку ПК - Не удача < /li>
    Замена aspnetCorev2_inprocess.dll (приложение опубликовано как самостоятельно, и версия этого изменилась, я думаю, потому что инструмент сборки « /li» < /li>
    соединяется с другим брокером (работает) < /li> < /li>
    , соединяющаяся с другим брокером (работает) < /li> < /li>
    , соединяющаяся с другим брокером (работает) < /li> < /li>
    , соединяющаяся с другим брокером (работает) < /li>
    Connuction, используя Connuctive Insuctive Ronatizing (Li> < /li>
    . Client-ID (работает, но разбивает мое приложение в других местах, так что это не вариант для работы)
Я действительно нахожусь в конце концов, и мне просто интересно, есть ли что-то невероятно глупо>

Подробнее здесь: https://stackoverflow.com/questions/796 ... er-anymore

Вернуться в «C#»