我要把一个大DataTable 作为消息参数传递到MSMQ
  string queuename = ".\\private$\\testQueue";//队列名称
            MessageQueue q;
            if (MessageQueue.Exists(queuename))
            {
                q = new System.Messaging.MessageQueue(queuename);
            }
            else
            {
                q = MessageQueue.Create(queuename);
            }            //
            string strconn = string.Format("server=192.168.0.50;database=RIS;uid=sa;pwd=sql2005");
            SqlConnection conn = new SqlConnection(strconn);
            SqlCommand cmd = new SqlCommand("select * from test1", conn);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable("temptable");
            da.Fill(dt);            //
            System.Messaging.Message m = new System.Messaging.Message();
              //m.Label = ;      //描述消息的字串
              Msg msg = new Msg();
              msg.ID = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString();
              msg.Label = this.textBox2.Text;
              msg.Body = this.textBox1.Text;
              msg.OtherInfo = dt;
              m.Body = msg;        //消息的主体
             q.Send(m);                      //发送//生成 XML 文档时出错

解决方案 »

  1.   

     System.Messaging.Message m = new System.Messaging.Message(t,new BinaryMessageFormatter());
      

  2.   

    可以尝试将datatable序列化为2进制数组传进去
      

  3.   

    这儿参数是dataset,DT是一样的。 
    public bool Send(DataSet InDataSet)
            {
                try
                {
                    lock (this._lock)
                    {
                        //创建消息队列
                        if (!MessageQueue.Exists(this.Path))
                        {
                            this.queue = MessageQueue.Create(this.Path);
                            this.queue.SetPermissions("Everyone", MessageQueueAccessRights.FullControl);
                        }
                        else
                        {
                            this.queue = new MessageQueue(this.Path);
                        }                    if (this.queue == null)
                        {
                            this.queue = new MessageQueue(this.Path);
                        }
                        //设置消息格式
                        this.queue.Formatter = new BinaryMessageFormatter(); //new XmlMessageFormatter(new Type[] { typeof(DataSet) });                    //消息体
                        System.Messaging.Message msg = new System.Messaging.Message();
    msg.Body = InDataSet;
                        //发送
                        this.queue.Send(msg);
                        return true;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    return false;
                }
            }