我有一些遗留代码通过MSMQ消息队列发送对象。它工作正常,但现在代码被移动到WCF服务。现在突然达到限制并且queue.Send行抛出异常:
"没有足够的资源来执行操作"。
我没有使用netMsmqBinding,只是通过MessageQueue对象发送它,所以我不知道如何增加对象大小的引用。
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以记录异常之后,我在资源之前看到了这一点:
12/10/2015 7:54:06 AM未被捕获的类型异常 抛出了System.TimeoutException。消息:'操作没有 在分配的超时00:00:09.9970000内完成。时间 分配给这个操作可能是一个更长的一部分 。超时'
我已将所有超时(打开/关闭/接收/发送)放在客户端和服务上45分钟,仍然会出现10秒超时错误。奇怪。
我该怎么办?
答案 0 :(得分:1)
抱歉打扰你......
答案 1 :(得分:0)
可能的问题是,由于一个或多个原因,您达到了MSMQ(~2GB)的存储/内存限制。
您可以通过检查文件夹的属性来快速检查队列大小:%windir%\system32\msmq\storage
。