MSMQ与Hashtable
来源:互联网 发布:淘宝退货退款运费谁出 编辑:程序博客网 时间:2024/05/10 01:23
今天在使用.NET操作消息队列时,碰到一个小问题,如果采用XmlMessageFormatter序列化消息体,则消息体中不能包含Hashtable等字段,否则将无法完成序列化和反序列化(即使消息体对象加上了Serializable特性也不行)。
经过研究发现,XmlMessageFormatter不会采用我们经常用于.NET Remoting序列化的二进制或Soap格式,而是使用Xml格式,所以Serializable标签对于XmlMessageFormatter不起作用。XmlMessageFormatter所支持的消息体对象中只能包含一些非常简单的基础类型字段。
为了让像Hashtable这样的类型能嵌入到消息体中,我们只有采用BinaryMessageFormatter,BinaryMessageFormatter采用的与.NET Remoting一样的运行库串行化机制,所以Serializable特性标签会被BinaryMessageFormatter识别,而且,我们必须为作为消息体的对象加上Serializable特性才能使用BinaryMessageFormatter。
如果我们像这样使用BinaryMessageFormatter,仍然会抛出无法序列化的异常:
但是换成下面就正常了:
经过研究发现,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();
}
{
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);
}
不知何解。{
System.Messaging.Message msg = new System.Messaging.Message(item ,new BinaryMessageFormatter());
msg.Label = "MQItem";
this.msgQueueForSend.Send(msg);
}
- MSMQ与Hashtable
- MSMQ 与ESB
- MSMQ 与ESB
- MSMQ与redis队列
- MSMQ消息队列与WCF MSMQ的认识与使用
- MSMQ
- MSMQ
- MSMQ
- MSMQ
- MSMQ
- MSMQ
- MSMQ
- MSMQ
- SAS IT技术(与MSMQ交互)
- [WCF MSMQ] 2. 队列与事务
- 作业调度Quartz与消息中间件MSMQ
- foreach与hashtable
- hashtable与hashmap
- 使用Null Object设计模式
- 我的架构经验小结(二)-- 关于三层架构
- 使用用例捕获需求
- 我的架构经验小结(一)-- 常用的架构模型
- 写书计划启动!《.NET通信框架的设计、实现与应用》
- MSMQ与Hashtable
- DTS开发记录(10)-- 可视化的流程编辑
- 基于MSMQ使用WCF
- ESFramework扩展之EsfFTP -- 基于ESFramework的FTP服务
- ESFramework扩展之EsfP2P -- 可靠的P2P传递
- 框架设计经验谈 -- 不要为框架作过多的假设
- ESFramework 最新进展 -- ESFramework体系 2006.08.25
- ESFramework扩展之EsfP2P -- 基于ESFramework的P2P实现
- DTS开发记录(9)-- 数据迁移任务 DataTask