C# 无法通过WCF服务内的MSMQ发送对象
我有一些遗留代码,它通过MSMQ消息队列发送对象。它工作得很好,但现在代码被移动到WCF服务。现在突然达到限制,队列。发送行抛出异常: “执行操作的资源不足” 我没有使用netMsmqBinding,只是通过MessageQueue对象发送它,所以我不知道如何增加对象大小的quotumC# 无法通过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
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及更高版本中消失。问题没有指定正在使用的服务器版本。我只知道我在过去遇到了什么。