![](/img/trans.png)
[英]Azure ServiceBus: Client.Receive() returns null for messages > 64 KB
[英]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#SDK的DeviceClient類。 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.