簡體   English   中英

接收來自Azure Servicebus / IotHub的消息

[英]Receive messages from Azure Servicebus / IotHub

我想不斷檢查azure servicebus / iothub中是否有消息。 但是,當我這樣做時,出現以下錯誤

“ mscorlib.dll中發生了'Amqp.AmqpException類型的異常,但未在用戶代碼中處理。其他信息:在狀態:結束下,'接收'操作無效。”

有什么想法我應該如何實現消息的不斷提取和/或解決此錯誤?

var connection = new Connection(address);
var session = new Session(connection);
var entity = Fx.Format("/devices/{0}/messages/deviceBound", _deviceId);

var receiveLink = new ReceiverLink(session, "receive-link", entity);
while (true)
{
    await Task.Delay(1000);

    var message = await receiveLink.ReceiveAsync();
    if (message == null) continue;
    //else do things with message
 }

從您正在使用的端點看,您正在談論接收雲到設備(c2d)消息,換句話說,您正在編寫的代碼在設備上運行,並且旨在接收通過服務於此設備,對嗎?

最簡單的方法是使用C#SDKDeviceClient類。 DeviceClientAmqpSample項目中提供了有關如何使用此類的示例

使用設備連接字符串創建DeviceClient實例后, DeviceClient類將具有一個ReceiveAsync方法,該方法可用於接收消息。

var deviceClient = DeviceClient.CreateFromConnectionString("<DeviceConnectionString>");
while(true)
{
    await Task.Delay(1000);
    var receivedMessage = await deviceClient.ReceiveAsync(TimeSpan.FromSeconds(1));
    if (receivedMessage != null)
    {
        var messageData = Encoding.ASCII.GetString(receivedMessage.GetBytes());
        Console.WriteLine("\t{0}> Received message: {1}", DateTime.Now.ToLocalTime(), messageData);
        await deviceClient.CompleteAsync(receivedMessage);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM