System.Messaging.MessageQueue queue = new System.Messaging.MessageQueue(".//Private$//MSMQDemo");            System.Messaging.Message message = new System.Messaging.Message();
            message.Body = textBox1.Text.Trim();
            message.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });
            queue.Send(message);
RT 点击发送后报错:
未处理 System.ArgumentOutOfRangeException
  Message=长度不能小于 0。
  参数名: length
  Source=mscorlib
  ParamName=length

解决方案 »

  1.   

    当调用某个方法时,如果在传递给该方法的参数中至少有一个不为空引用 且不包含有效值,则将引发 ArgumentOutOfRangeException。
      

  2.   


    这里是Message的某些属性不全导致的?到底应该怎么设置后才能成功发送呢?
      

  3.   

    用下面这段试验一下。// Send Messageprivate void btnSendMessage_Click(object sender, System.EventArgs e){       // Open queue       System.Messaging.MessageQueue queue = new System.Messaging.MessageQueue(".\\Private$\\MSMQDemo");        // Create message       System.Messaging.Message message = new System.Messaging.Message();       message.Body = txtMessage.Text.Trim();       message.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] {typeof(string)});        // Put message into queue       queue.Send(message);} // Receive Messageprivate void btnReceiveMessage_Click(object sender, System.EventArgs e){       // Open queue       System.Messaging.MessageQueue queue = new System.Messaging.MessageQueue(".\\Private$\\MSMQDemo");         // Receive message, 同步的Receive方法阻塞当前执行线程,直到一个message可以得到        System.Messaging.Message message = queue.Receive();        message.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] {typeof(string)});       txtReceiveMessage.Text = message.Body.ToString();}
      

  4.   

    再不行,就用下一段试验一下,微软官网上的。using System;
    using System.Messaging;namespace MyProject
    {    /// <summary>
        /// Provides a container class for the example.
        /// </summary>
        public class MyNewQueue
        {        //**************************************************
            // Provides an entry point into the application.
            // 
            // This example sends a message to a queue.
            //**************************************************        public static void Main()
            {
                // Create a new instance of the class.
                MyNewQueue myNewQueue = new MyNewQueue();            // Send a message to a queue.
                myNewQueue.SendMessage();            return;
            }
            //**************************************************
            // Sends a message to a queue.
            //**************************************************

            public void SendMessage()
            {

                // Connect to a queue on the local computer.
                MessageQueue myQueue = new MessageQueue(".\\myQueue");            // Send a message to the queue.
                if (myQueue.Transactional == true)
                {
                    // Create a transaction.
                    MessageQueueTransaction myTransaction = new 
                        MessageQueueTransaction();                // Begin the transaction.
                    myTransaction.Begin();                // Send the message.
                    myQueue.Send("My Message Data.", myTransaction);                // Commit the transaction.
                    myTransaction.Commit();
                }
                else
                {
                    myQueue.Send("My Message Data.");
                }            return;
            }
        }
    }
      

  5.   

    谢了 问题解决了,我也是参考的这个代码,但是我把那个路径的反斜线搞反了。但是按照这个代码会报错消息队列不存在。So我改成这样了MessageQueue queue = null;
                    string mqName = ".\\Private$\\MSMQDemo";
                    if (MessageQueue.Exists(mqName))
                    {
                        queue = new MessageQueue(mqName);
                    }
                    else
                    {
                        queue = MessageQueue.Create(mqName, false);
                        queue.SetPermissions("Everyone", MessageQueueAccessRights.FullControl);
                    }
                    System.Messaging.Message message = new System.Messaging.Message();
                    message.Body = textBox1.Text.Trim();
                    message.Formatter = new XmlMessageFormatter(new Type[] { typeof(String) });
                    queue.Send(message);
                    MessageBox.Show("发送成功!");
      

  6.   

    ok,谢谢了 已经解决了哈。thanks