当前位置: 代码迷 >> C# >> WCF,不传输这个成员,该怎么处理
  详细解决方案

WCF,不传输这个成员,该怎么处理

热度:177   发布时间:2016-04-28 08:44:07.0
WCF,不传输这个成员

[DataContract] 
public class Student   
{
    [DataMember] 
    public string Name { get; set; }
    public int age;
}

在上面的数据契约中,age并没有使用DataMember标记,因为在Student对象的传输过程中,不需要传输这个成员。那么,现在有这样一个问题:在age上没有使用DataMember标记,在客户端添加服务引用之后,Student类中也就不会出现这个age成员,那如何在客户端使用age成员呢?
虽然客户端向服务端传输信息时,不传输age,但并没有说客户端不使用age啊,咋整呢...
------解决思路----------------------
你可以使用同一份数据契约啊
------解决思路----------------------
你这个好奇怪,如果age对客户端无意义的话,那么你不标注DataMember没关系,另外服务端也是能接受客户端上传的非数据契约字段,即wcf支持数据契约不一致,但那个属性叫啥我记不得了,应该会有同学在后面做补充的
------解决思路----------------------
前一个帖子跟你说过这个问题

[Serializable] 
public class Student   
{
    public string Name { get; set; }
[NonSerialized]
    public int age;
}

------解决思路----------------------
引用:
虽然客户端向服务端传输信息时,不传输age,但并没有说客户端不使用age啊,咋整呢...


奇葩。你的WCF是用来干啥的?WCF用不着的东西,你硬要“在客户端使用”,翻来覆去纠结这个简单规则,何必呢?
------解决思路----------------------
如果你的客户端需要,那么你就让它作为WCF规则的一部分而被支持。如果你的WCF服务不需要有它,就别纠结在客户端使用WCF服务时反而有必须有它。

别瞎耗费时间了。

不同的业务对象,就设置不同的类型。不同的服务,就设计不同的服务接口方法。不要扯什么“一个万能类型、一个万能服务参数”之类的话。如果扯这些,你何必学习强类型的编程语言呢?放弃.net、java等等吧!
------解决思路----------------------
我回头看了你顶上的帖子,你什么时候又整成了“添加服务引用”了呢?上次你不是改成了引用契约类库的吗?
这样吧,你先在服务引用上更新一下程序集中的类型,看能否出来,因为我的这种声明方式我忘记是否会在代理类中生成字段,如果更新后确定没有,那我看你只有手动更新代理类了。
但我觉得从设计上讲已经存在问题,最好你能重新划分一下类及成员,不要搞出不伦不类的东西。
------解决思路----------------------
没有哪个WCF的服务的客户端没有自己定义的类,WCF是服务,可以是公共的,客户端可以由别人自行开发,只要按其公开的契约与服务通信即可,客户端根据自己的应用需求肯定有属于自己的类,与WCF服务没有任何关系,你把自动生成的代理类当成是客户端全部的类,这是不对的,这下你应该开朗了。
  相关解决方案