我正在将应用程序从一个服务器移动到另一个服务器,新服务器返回“着名的” - “资源不足以执行操作” . 消息当代码尝试向队列发送多条消息时,该进程被包装在一个事务(TransactionScope)中 . 旧服务器正确执行代码,所有消息(约150个)按预期发送到队列,但新服务器在apporx 27处失败 .
现在消息大小很小,队列中的消息数为零 .
我've read the ' Insufficient Resources? Run away, run away! ' article but I' m不确定如何更改MSMQ的机器配额 .
应用程序日志包含以下条目:
System.Messaging.MessageQueueException (0x80004005): Insufficient resources to perform operation.
技术是C#和.Net 4.0,服务器是赢得2003 R2 SP2
任何想法为什么我得到这个?
3 回答
其中一条消息超过了4 Mb的限制 - 一旦对此进行了排序,一切都按预期工作 .
只是添加问题编号#7存储空间和Mitch的答案 .
您的配额大小是磁盘上的物理大小,而不是队列报告的大小(在QueueExplorer或性能监视器等应用程序中报告) .
所以即使你已经清除了你的队列,你实际上并没有从磁盘中删除它们(它意味着每六个小时清理一次) -
默认位置是C:\ Windows \ System32 \ msmq \ storage,或者从Mitch的答案中的第一个链接获取它 .
要清理,您不能只删除文件 .
尝试以下脚本(另存为myScript.vbs) . 使用以下命令从命令提示符运行此命令:
cscript myScript.vbs
在此之后,我们的文件从1Gb下降到大约50mb,即使队列中的字节报告为40mb .
信贷线程:https://groups.google.com/forum/#!topic/microsoft.public.msmq.performance/jByfXUwXFw8
如果是配额问题(该文章中的#7):Set the Message Storage Size for Computers
How to set up computer quotas and queue quotas in Microsoft Message Queuing
Administering Message Queuing Operations