[英]cannot send object over MSMQ inside WCF service
我有一些旧代码,可以通过MSMQ消息队列发送对象。 它工作正常,但现在代码已移至WCF服务。 现在突然达到了极限,并且队列。发送行引发了异常:
“资源不足,无法执行操作”。
我没有使用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后,在资源之前我看到了以下内容:
2015/12/10 7:54:06引发了未捕获的System.TimeoutException类型的异常。 消息:“操作未在分配的超时时间00:00:09.9970000内完成。 分配给该操作的时间可能是较长超时的一部分。
我已经将客户端和服务上的所有超时(打开/关闭/接收/发送)设置为45分钟,但仍然会出现10秒超时的错误。 奇怪。
我能做什么?
发现问题的原因,这是我自己的错。 我已经从Delivery的两个最大成员中删除了[XmlIgnore]属性。 而且由于Delivery使用XmlMessageFormatter进行了序列化以进行消息排队,因此该对象对于队列来说太大了。
抱歉打扰你....
可能的问题是由于1个或多个原因,您已达到MSMQ的存储/内存限制(〜2GB)。
您可以通过检查文件夹的属性来快速检查队列大小: %windir%\\system32\\msmq\\storage
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.