无法通过 WCF 服务内的 MSMQ 发送对象
cannot send object over MSMQ inside WCF service
我有一些遗留代码可以通过 MSMQ 消息队列发送对象。它运行良好,但现在代码已移至 WCF 服务。现在突然达到限制并且 queue.Send 行抛出异常:
"Insufficient resources to perform operation".
我没有使用 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 Uncaught exception of type
System.TimeoutException was thrown. Message: 'The operation did not
complete within the allotted timeout of 00:00:09.9970000. The time
allotted to this operation may have been a portion of a longer
timeout.'
我已经将客户端和服务的所有超时 (open/close/receive/send) 设置为 45 分钟,但仍然出现 10 秒超时错误。奇怪。
我能做什么?
可能的问题是您由于 1 个或多个原因达到了 MSMQ (~2GB) 的 storage/memory 限制。
- 邮件正在您的一个队列中累积,未被处理和删除。 (最有可能)
- 日记功能已打开。
- 死信队列已满。
您可以通过检查文件夹的属性来快速检查队列大小:%windir%\system32\msmq\storage
。
问题原因找到了,是我自己的错。
我已经从 Delivery 的两个最大成员中删除了 [XmlIgnore] 属性。由于 Delivery 是用 XmlMessageFormatter 序列化的,用于消息队列,对象对于队列来说太大了。
抱歉打扰了....
我有一些遗留代码可以通过 MSMQ 消息队列发送对象。它运行良好,但现在代码已移至 WCF 服务。现在突然达到限制并且 queue.Send 行抛出异常:
"Insufficient resources to perform operation".
我没有使用 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 Uncaught exception of type System.TimeoutException was thrown. Message: 'The operation did not complete within the allotted timeout of 00:00:09.9970000. The time allotted to this operation may have been a portion of a longer timeout.'
我已经将客户端和服务的所有超时 (open/close/receive/send) 设置为 45 分钟,但仍然出现 10 秒超时错误。奇怪。
我能做什么?
可能的问题是您由于 1 个或多个原因达到了 MSMQ (~2GB) 的 storage/memory 限制。
- 邮件正在您的一个队列中累积,未被处理和删除。 (最有可能)
- 日记功能已打开。
- 死信队列已满。
您可以通过检查文件夹的属性来快速检查队列大小:%windir%\system32\msmq\storage
。
问题原因找到了,是我自己的错。 我已经从 Delivery 的两个最大成员中删除了 [XmlIgnore] 属性。由于 Delivery 是用 XmlMessageFormatter 序列化的,用于消息队列,对象对于队列来说太大了。
抱歉打扰了....