C# Azure ServiceBus:Client.Receive()为消息返回null>;64 KB
我正在使用一个C# Azure ServiceBus:Client.Receive()为消息返回null>;64 KB,c#,message-queue,azureservicebus,C#,Message Queue,Azureservicebus,我正在使用一个BrokeredMessage,其中包含一个带有序列化对象的流。根据文档,流是正文的一部分,而不是限制为64 KB的标题。总消息大小约为67KB,远远低于ServiceBus队列的消息大小 我能够发送一条消息,它以正确的消息大小显示在队列中 发出Receive-命令后,数据包将从队列中删除,计数器将相应减少。但是,该操作运行到超时,并返回一个null-指针,而不是BrokeredMessage 我尝试了一个大小为42KB的数据包,所有这些都可以很好地进行发送、接收和反序列化 Q为什
BrokeredMessage
,其中包含一个带有序列化对象的流。根据文档,流是正文的一部分,而不是限制为64 KB的标题。总消息大小约为67KB,远远低于ServiceBus队列的消息大小
我能够发送一条消息,它以正确的消息大小显示在队列中
发出Receive
-命令后,数据包将从队列中删除,计数器将相应减少。但是,该操作运行到超时,并返回一个null
-指针,而不是BrokeredMessage
我尝试了一个大小为42KB的数据包,所有这些都可以很好地进行发送、接收和反序列化
Q为什么它不能处理较大的消息?我如何才能使它工作
编辑0
我尝试接收一个填充了随机模式的字节-数组:
var bm = new BrokeredMessage(new byte[n])
n
=63500确实有效。(发送:HeaderSize
=53,BodySize
=63572;接收:HeaderSize
=139,BodySize
=63572)
n
=64000不起作用。(发送:HeaderSize
=54,BodySize
=64072;接收:null
)
编辑1
@David Pfeffer就这么简单:
var queueWork = QueueClient.CreateFromConnectionString(@"Endpoint=sb://***/;SharedAccessKeyName=***;SharedAccessKey=***", path, ReceiveMode.ReceiveAndDelete);
BrokeredMessage message = queueWork.Receive();
我无法复制这个。以下是我的示例代码:
var client = QueueClient.CreateFromConnectionString("Endpoint=sb://***.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=***", "queue", ReceiveMode.ReceiveAndDelete);
client.Send(new BrokeredMessage(new byte[100000]));
var msg = client.Receive();
// msg is happy
您可以显示接收失败代码的示例吗?@davidfeffer请参见编辑1您没有使用内部部署服务总线,是吗?@davidfeffer没有,但我隐藏在防火墙后面…IIRC,消息>64kb<256kb被分块。这就是为什么他们习惯于按64kb的块计费,所以一条100kb的消息将按两条消息计费。并不是这些信息解决了您的问题,而是一个有趣的观察结果,即64kb是服务总线的神奇数字。