WCF服务中的属性,具有在客户端使用的一些初始值

时间:2009-10-27 15:32:46

标签: wcf

我在WCF服务类中有一个具有初始值的属性,如下所示

    private int mFieldLength_Name = 50;
    [DataMember]
    public int FieldLength_Name
    {
        get { return mFieldLength_Name; }
        private set { mFieldLength_Name = value; }
    }

然而,当我在客户端打电话时,它总是返回'0'而不是'50'。

如何解决此问题?

我试过[DataMember(EmitDefaultValue = false)] 但没有工作...... :(

谢谢,

日剧

2 个答案:

答案 0 :(得分:4)

我遇到了同样的问题;在做了很多尝试后,我最终发现问题在于DataType

我根据数据库有一个数据类型Int32,并且使用的属性类型为String,它不会产生任何编译或执行问题,因为int可以默认序列化string

但我每次都看到空值,我将属性类型更改为Int32,它就像一个魅力。试一试,确认您的数据类型,因为它们在编译器上显示正确的数据,直到第一次服务调用,但是一旦您跨越服务,您将看到空数据。

因此,如果我在一行中告诉解决方案,那么数据类型是不一样的;它可能会返回空值。

答案 1 :(得分:1)

您是否在服务器上使用与客户端相同的DataContracts程序集?如果您正在生成自己的合同以便在客户端中使用,那么它将不知道这种初始化,因为这是一种无法通过线路转换的行为。

当您为某个类型选择“非自然”默认值(即整数为50而不是0)时,您必须将DefaultValueAttribute应用于数据成员,以便DataContractSerializer认识到该值是默认值而不是发出它。