![](/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.