c# bool变量总是false/ Datetime变量总是Datetime.最小的WCF Web服务

本文关键字:Datetime 变量 服务 Web WCF bool false | 更新日期: 2023-09-27 18:15:06

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

我有一个类附件,我用它来保存一些附件在网站上。

[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; }
    }...

问题是,当我向WCF服务发出一些请求时,字段IsNew总是False,即使我确定我在请求设置为True时发送它。同样的问题,我有一个DateTime字段-我发送一个值<> DateTime。Min,但是在web服务中,我总是让这个字段等于DateTime.Min。

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

我做错了什么?

c# bool变量总是false/ Datetime变量总是Datetime.最小的WCF Web服务

信息从这里收集。

在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");
    }
}

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

设置此标志有多种方法,但是如果字段是必需的,那么有一种方法可以通过使用[DataMember(IsRequired=true)]属性来阻止'blahblahSpecified'标志生成,例如

[DataMember(IsRequired=true)]
public DateTime EditDate { get; set; }