WCF数据协定

下文枯燥无趣 毫无逻辑 不建议阅读 是传说中的WCF系列数据协定部分的摘抄 建议阅读原文
http://blog.csdn.net/tcjiaan/article/details/8195867
不管在服务器端我们把数据成员定义为公共属性还是私有字段,到了客户端都全变成公共属性了
这什么会这样呢?其实数据协定是通过XML来传输的,你想一想XML序列化的特点就找到些启发了,XML序列化和反序列化只针对公共成员,所以,如果希望让私有的数据成员也能进行序列化,能做的事情就是把数据成员都变成公共成员。这一点MSDN上也有相关说明。
使用数据协定可以灵活控制哪些成员应该被客户端识别。
在一些比较复杂的类型无法反序列化(不能识别类型)的时候,就得考虑使用KnownTypeAttribute来标注可能涉及到的外部类型,但如果遇到像泛型这些较为复杂的类型,就要考虑在带数据协定的类中添加一个静态方法,该方法返回Type 的IEnumerable,一般是Type[]就可以了,而在KnownTypeAttribute的构造函数中使用这个方法的名字。

 [DataContract]
[KnownType("GetKnowTypes")]
public class Student
{
    [DataMember]
    public string Name;
    [DataMember]
    public string Phone;
    [DataMember]
    public AddrInfo Address;
    //Scores为复杂类型 
    [DataMember]
    public object Scores;
    static Type[] GetKnowTypes()
    {
        return new Type[] { typeof(Dictionary<string, float>) };
    }
}

其实直接用对应的类型也可以啊。
单工与双工生成的SOAP不同
单工
[OperationContract(IsOneWay = true)]
启用单向通讯的方法,不能有返回值(void可以),不能有out参数,只允许传入参数。
双工(默认)
[OperationContract(IsOneWay = false)]
双向通讯是有问必有答的(哪怕方法返回void,客户端也会收到一条空消息)。
有来无往叫单向通讯,礼尚往来叫双向通讯

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值