WCF中使用MSMQ无法传送自定义对象
来源:互联网 发布:韩国淘宝网址 编辑:程序博客网 时间:2024/05/16 12:30
WCF中使用MSMQ无法传送自定义对象
WCF在底层使用操作系统的MSMQ实现离线的队列操作,并为此提供了一个NetMsmqBinding。
通过精心的设计,在WCF中使用NetMsmqBinding与使用其他绑定的编程方式是一致的。
然而,这里面有一个容易忽视的地方。那就是要注意在服务协定中要使用自定义对象的问题。
一个例子如下所示:
[ServiceContract]
public interface IWCFMSMQTransactionService
{
[OperationContract(IsOneWay=true)]
void SendMessage(MyDataItem data);
}
上述服务协定要使用自定义类型MyDataItem ,它的声明如下 :
[DataContract]
public class MyDataItem
{
[DataMember]
public int IntValue
{
get;
set;
}
[DataMember]
public string StringValue
{
get;
set;
}
}
你会发现,如果使用NetMsmqBinding绑定时,客户端将无法将一个MyDataItem对象序列化并传送到服务端。并且,整个程序不会引发任何异常,只是服务端反序列化出来的MyDataItem对象的属性全部具有默认值。
解决方法很简单:
给MyDataItem加上一个命名空间:
[DataContract(Namespace="http://www.bit.edu.cn/CS")]
public class MyDataItem
{
[DataMember]
public int IntValue
{
get;
set;
}
//代码略
}
则一切工作正常。
原因何在?
其实,这是因为MSMQ的问题。默认设置下,MSMQ使用XmlMessageFormatter序列化对象,对象被转换为XML数据。在这个序列化过程中,如果WCF中的数据对象没有设置命名空间,则MSMQ不会序列化这个对象中各个属性的值,这是可以理解的,XML规范要求必须通过命名空间区分开不同来源的XML数据中可能同名的元素。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bitfan/archive/2009/07/01/4312148.aspx
- WCF中使用MSMQ无法传送自定义对象
- WCF中使用MSMQ无法传送自定义对象
- WCF中使用MSMQ无法传送自定义对象
- 基于MSMQ使用WCF
- 基于MSMQ使用WCF
- MSMQ消息队列与WCF MSMQ的认识与使用
- WCF--MSMQ
- socket传送自定义对象
- WCF分布式开发常见错误(17):无法启动MSMQ服务
- WCF中使用自定义“用户名/密码”验证
- .net 中MSMQ的使用
- 使用MSMQ消息队列的WCF的效率的问题。
- wcf的 msmq
- MSMQ In WCF
- 使用MSMQ
- 使用MSMQ
- MSMQ使用
- 在MSMQ中使用事务处理消息
- CTO们如何看待毕业生(2)-在面试过程中有没有发现有人带笔记
- NTFS权限保护重要文件夹防止被删除
- 子类化与超类化
- 分享:访问google.com的方法
- 金旭亮技术文章及资源搬家公告
- WCF中使用MSMQ无法传送自定义对象
- 程序员创业,不要把风险带给家人!——网上答疑(4)
- 《白话C++》第1章.启蒙---1.1 开始
- 《白话C++》第1章 启蒙----1.2 什么是计算机
- 网络的OSI七层结构
- 看bbc英语
- 人生若只如初见(转)
- 3.1 开始C++编程
- 白乔原创:程序员的路该怎么走?