繁体   English   中英

无法通过WCF服务中的MSMQ发送对象

[英]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)。

  1. 邮件正在您的一个队列中累积,没有被处理和删除。 (最有可能的)
  2. 日记功能已打开。
  3. 死信队列已满。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM