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

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

Сообщение Anonymous »

Я разрабатываю приложение .NET 8.0 Blazor, которое использует MQTTNET для отправки некоторых данных в брокер Mosquitto (v2.0.21, работающий в Docker), которое используется другим приложением (в основном только централизованное приложение, которое несколько клиентов посылали свои данные). < /p>
Теперь все было отлично, все подключили свои клиенты и были способны отправить данные). Я в последний раз обновлял свое приложение, один клиент больше не может подключаться к брокеру. Код для обработки соединений MQTT также остается таким же. Другие случаи, которые были обновлены, все еще работают после обновления (Debian 11, Docker на Debian 12 и коллекция других различных версий Windows).
< /del>
возвращается к старой версии, также решает проблему.
Код для подключения в основном выглядит так: < /p>

Код: Выделить всё

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();
}
, потом, когда я хочу использовать клиента, я жду, пока это свойство Isconnected станет верным, чтобы отправить несколько полезных нагрузок. Однако этого никогда не происходит, и тайм -аут (который установлен в 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);
}
Вещи, которые я пробовал:

[*] Перезагрузку брокера MQTT (в случае очистки , который, как я знаю, является чистым составом в v5, но он все равно устанавливает одно и то же собственность, не делает все настройки (или, по -видимому, не удачи Соединение с использованием другого клиентского идентификатора (работает, но разбивает мое приложение в других местах, так что это не вариант для работы) < /li>
< /ul>
Я действительно нахожусь в конце моего остроумия, и я просто задаюсь вопросом, есть ли что-то невероятно глупое, что я скучаю по или это могло быть поведением в этом чудесном поведении.
udpate:
для разъяснения: единственная вещь, которая меняется (обновление), чтобы вызвать проблему, - это версия моего приложения .net (то есть заменить .exe и. вызывая любые проблемы.

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

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