Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Azure ServiceBus:Client.Receive()为消息返回null>;64 KB_C#_Message Queue_Azureservicebus - Fatal编程技术网

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是服务总线的神奇数字。