C#bool变量始终为false/Datetime变量始终为WCF Web Service中的DateTime.Min

Ion*_*tco 2 c# asp.net wcf web-services boolean

我对WCF Web服务很陌生,直到现在我使用.asmx Web服务,我从来没有遇到类似的问题.

我有一个类Attachement,我用它来保存网站上的一些附件.

[DataContract]
public class Attachement
{
    private string _Name;
    [Column]
    [DataMember(Order = 1)]
    public string Name
    {
        get { return _Name; }
        set { _Name = value; }
    }
    .
    .
    .
    private bool _IsNew;
    [DataMember(Order = 6)]
    public bool IsNew
    {
        get { return _IsNew; }
        set { _IsNew = value; }
    }...
Run Code Online (Sandbox Code Playgroud)

问题是当我向WCF服务发出一些请求时,字段IsNew总是为False,即使我确定我在请求集中将它发送给True.与DateTime字段相同的问题 - 我使用值<> DateTime.Min发送它,但在Web服务中,我总是将此字段与DateTime.Min相等.

我可以使用字符串而不是bool和DateTime来解决这个问题,但是我无法解析这种类型的变量真的很烦人.

我究竟做错了什么?

Pau*_*hra 5

信息来自这里.

在WCF中,您必须非常明确,您的参数将在方法签名中插入自动生成的标志参数(查看生成的代理以查看它们),例如,如果您的字段是EditDate,则自动生成的属性将是EditDateSpecified,请参阅下面.

[System.Xml.Serialization.XmlElementAttribute(Order=0)]
public System.DateTime EditDate {
    get {
        return this.editDateField;
    }
    set {
        this.editDateField = value;
        this.RaisePropertyChanged("EditDate");
    }
}

[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool EditDateSpecified {
    get {
        return this.editDateFieldSpecified;
    }
    set {
        this.editDateFieldSpecified = value;
        this.RaisePropertyChanged("EditDateSpecified");
    }
}
Run Code Online (Sandbox Code Playgroud)

WCF要求您设置此自动生成标志以指定值位于自动生成标志所用的属性中.

设置此标志有多种方法,但是如果需要该字段,则可以通过使用[DataMember(IsRequired = true)]属性来停止生成"blahblahSpecified"标志,例如

[DataMember(IsRequired=true)]
public DateTime EditDate { get; set; }
Run Code Online (Sandbox Code Playgroud)