我对 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 来解决这个问题,但是我无法解析这种类型的变量,这真的很烦人。
我做错了什么?
最佳答案
信息来自here .
在 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; }
关于WCF Web 服务中的 C# bool 变量始终为 false/Datetime 变量始终为 DateTime.Min,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32840506/