C# 无法通过WCF服务内的MSMQ发送对象

C# 无法通过WCF服务内的MSMQ发送对象,c#,.net,wcf,msmq,C#,.net,Wcf,Msmq,我有一些遗留代码,它通过MSMQ消息队列发送对象。它工作得很好,但现在代码被移动到WCF服务。现在突然达到限制,队列。发送行抛出异常: “执行操作的资源不足” 我没有使用netMsmqBinding,只是通过MessageQueue对象发送它,所以我不知道如何增加对象大小的quotum MessageQueue queue = new MessageQueue(queueName); using (MessageQueueTransaction tx = queue.Transactional

我有一些遗留代码,它通过MSMQ消息队列发送对象。它工作得很好,但现在代码被移动到WCF服务。现在突然达到限制,队列。发送行抛出异常:

“执行操作的资源不足”

我没有使用netMsmqBinding,只是通过MessageQueue对象发送它,所以我不知道如何增加对象大小的quotum

MessageQueue queue = new MessageQueue(queueName);

using (MessageQueueTransaction tx = queue.Transactional ? new MessageQueueTransaction() : null)
{
    if (queue.Transactional)
    {
      tx.Begin();
    }

    Message msg = new Message();
    msg.Body = delivery;
    msg.Label = delivery.GetType().Name + " " + delivery.DeliveryId;
    msg.Formatter = new XmlMessageFormatter(new Type[] { typeof(Delivery) });
    msg.Recoverable = true;
    queue.Send(msg, tx);
}
在服务上实现IErrorhandler以记录异常后,我在参考资料前面看到了这一点:

2015年10月12日上午7:54:06未捕获类型异常 已引发System.TimeoutException。消息:'操作未成功 在分配的00:00:09.9970000超时内完成。时间 分配给该操作的可能是更长时间的一部分 暂停。”

我已经将客户端和服务上的所有超时(打开/关闭/接收/发送)设置为45分钟,但仍然会出现10秒超时的错误。奇怪


我能做什么?

可能的问题是,由于一个或多个原因,您正在达到MSMQ(~2GB)的存储/内存限制

  • 消息正在您的一个队列中累积,未被处理和删除。(最有可能)
  • 日志记录已打开
  • 死信排队的人越来越多

  • 您可以通过检查文件夹的属性来快速检查队列大小:
    %windir%\system32\msmq\storage

    找到问题的原因,是我自己的错。 我已经从Delivery的两个最大成员中删除了[XmlIgnore]属性。由于传递是使用XmlMessageFormatter序列化的,用于消息队列,因此对象对于队列来说太大了


    很抱歉打扰您……

    听起来您的MSMQ存储已达到~2 gig的限制。您是否有包含大量邮件的队列?值得注意的是,MSMQ不适用于长期存储。它是一个队列,不应该保留队列中的项目。添加消息时,另一个进程几乎会立即拾取该消息。@ServéLaurijssen您使用的是什么绑定?如果是NetTcpBinding,则可以//QUOTAS binding.MaxConnections=200;binding.ListenBacklog=800;binding.MaxBufferSize=Int32.MaxValue;binding.MaxReceivedMessageSize=Int32.MaxValue;binding.ReaderQuotas.MaxStringContentLength=Int32.MaxValue;binding.ReaderQuotas.MaxArrayLength=Int32.MaxValue;binding.ReaderQuotas.MaxNameTableCharCount=Int32.MaxValue;binding.ReaderQuotas.MaxDepth=128;binding.ReaderQuotas.MaxBytesPerRead=4096@Serve`Laurijseen-对不起,我的坏消息-在重读你的帖子时-我漱口了一下,找到了一个链接:这些东西有多大?MSMQ消息的最大容量为4MB。您是否在服务端使用NetMSMQ绑定?Windows 2000中的限制为2GB!该限制在Windows XP及更高版本中消失。问题没有指定正在使用的服务器版本。我只知道我在过去遇到了什么。