zoukankan      html  css  js  c++  java
  • MSMQ与Hashtable

       今天在使用.NET操作消息队列时,碰到一个小问题,如果采用XmlMessageFormatter序列化消息体,则消息体中不能包含Hashtable等字段,否则将无法完成序列化和反序列化(即使消息体对象加上了Serializable特性也不行)。
       经过研究发现,XmlMessageFormatter不会采用我们经常用于.NET Remoting序列化的二进制或Soap格式,而是使用Xml格式,所以Serializable标签对于XmlMessageFormatter不起作用。XmlMessageFormatter所支持的消息体对象中只能包含一些非常简单的基础类型字段。
       为了让像Hashtable这样的类型能嵌入到消息体中,我们只有采用BinaryMessageFormatter,BinaryMessageFormatter采用的与.NET Remoting一样的运行库串行化机制,所以Serializable特性标签会被BinaryMessageFormatter识别,而且,我们必须为作为消息体的对象加上Serializable特性才能使用BinaryMessageFormatter。
       如果我们像这样使用BinaryMessageFormatter,仍然会抛出无法序列化的异常:

            public void SendItem(MQItem item)
            {
                System.Messaging.Message msg 
    = new System.Messaging.Message();
                msg.Body 
    = item;
                msg.Label 
    = "MQItem";
                
    this.msgQueueForSend.Send(msg); //this.msgQueueForSend.Formatter = new BinaryMessageFormatter();
            }


       但是换成下面就正常了:

            public void SendItem(MQItem item)
            {
                System.Messaging.Message msg 
    = new System.Messaging.Message(item ,new BinaryMessageFormatter());            
                msg.Label 
    = "MQItem";
                
    this.msgQueueForSend.Send(msg);
            }

       不知何解。


  • 相关阅读:
    Javascript&Html-系统对话框
    Javascript&Html-延迟调用和间歇调用
    Javascript&Html-弹出窗口的屏蔽程序
    iPhone屏幕旋转
    iPhone深度学习-ARM
    xCode控制台的使用-应用闪退原因跟踪
    IOS-内存检测以及优化
    Javascript-Array
    http与https的区别
    Nginx:处理HTTP请求
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/562358.html
Copyright © 2011-2022 走看看