首页 > 解决方案 > 使用 .NET 连接到 AWS MQTT

问题描述

我有一个 .Net/UWP 应用程序,我需要修改它以通过 AWS 上的 MQTT 发送状态。我看到很多关于如何使用其他语言发布/订阅的示例,但是对于 .Net,我发现的信息似乎已经过时并且不再适用。

在 .Net AWSSDK 中是否有任何与AWSIotClient类(来自 Java)等价的东西?有什么方法可以从 .Net 与 AWS 进行通信?

标签: .netuwpaws-iot

解决方案


有同样的问题,但从未找到官方 AWS 发布的用于 IoT Core 的 C# SDK,尽管您可以使用MQTTnet与 AWS IoT Core 通信。

以下是有关如何连接的片段:

var pfxCert = new X509Certificate2(X509Certificate2.CreateFromPemFile(pemCert,pemPrivKey).Export(X509ContentType.Pfx));
var factory = new MqttFactory();
var mqttClient = factory.CreateMqttClient();
var options = new MqttClientOptionsBuilder()
        .WithTcpServer(endpoint, 8883)
        .WithClientId(clientId)
        .WithCleanSession()
        .WithCommunicationTimeout(TimeSpan.FromSeconds(60))
        .WithTls(new MqttClientOptionsBuilderTlsParameters
        {
            UseTls = true,
            SslProtocol = System.Security.Authentication.SslProtocols.Tls12,
            IgnoreCertificateRevocationErrors = true,
            IgnoreCertificateChainErrors = true,
            AllowUntrustedCertificates = true,
            Certificates = new List<X509Certificate>
            {
                pfxCert
            }
        })
        .Build();

await mqttClient.ConnectAsync(options, CancellationToken.None);

要发送消息:

var message = new MqttApplicationMessageBuilder()
            .WithTopic(topic)
            .WithPayload(jsonMessage)
            .Build();

var result = await _mqttClient.PublishAsync(message, CancellationToken.None);

推荐阅读