我怎样才能而WCF服务创建代理摆脱指定的字段?(How I can get rid of speci

2019-10-23 06:33发布

而从WCF服务创建代理,这是我内部服务代理中创建一个多个布尔类型指定字段声明的每个值类型成员。 有没有什么办法可以摆脱这一点,并继续与服务进行交易?

我有以下服务所描述类

[DataContract]
public class Customer
{
    private int customerID;

    [DataMember]
    public int CustomerID
    {
        get { return customerID; }
        set { customerID = value; }
    }
}

在创建代理我有这样的代理类

public partial class Customer
{
     private int customerIDField;

     private bool customerIDFieldSpecified;
     public int CustomerID 
     {
         get { return this.customerIDField; }
         set { this.customerIDField = value; }
     }
}

我怎么能在代理摆脱customerIDFieldSpecified布尔类型的成员吗? 而且我怎么能继续服务仅通过设置customerIDField。

我希望我的代理类是这样的

public partial class Customer
{
     private int customerIDField;
     public int CustomerID 
     {
         get{ return this.customerIDField; }
         set{ this.customerIDField = value; }
     }
}

Answer 1:

我怎么能在代理摆脱customerIDFieldSpecified布尔类型的成员吗?

它曾经是与类型BOOL,INT,小数,或暴露在服务边界的任何XSD兼容值类型的类成员ASMX Web服务通常具有同等...FieldSpecified除了定义为实际的字段属性遏制值。

这种投入所产生的代理代码的原因很简单:当XmlSerializer的序列化类型的XML,因为在.net中这些类型(如果他们没有指定)返回默认值 ,得到的消息负载将包含一个布尔值或小数/ INT /等字段分别与值假或0。

现在,如果你在一个类型忽略的值,那么这种类型被序列化,并设置为它的默认值,那么这是不可取的,因为默认值是实际值,这是一种误导,将导致缺陷。 因此,要解决这个问题了...FieldSpecified财产进行了介绍。

当时的想法是,如果你想被列入外地,你也不得不相当于FieldSpecified属性设置为true,这将指示在服务端XmlSerializer的反序列化(因此分配)的值代入的服务器的代表性类型。 如果没有指定,则XmlSerializer的会跳过相当的财产,只是移动到下一个字段中的XML。

随着WCF,微软推出DataContractSerializer的,作为XmlSerializer的一个替代品。 DataContractSerializer的不表现出对反序列化相同的行为,并不会试图给在XML中不存在字段的任何值,所以这个额外的领域不再需要。 然而,在某些情况下,WCF倒在当它是从服务元数据,这是我的猜测,您如何结束了与他们生成的客户端代码XmlSerializer的。



文章来源: How I can get rid of specified fields while creating proxy for a WCF service?