【发布时间】:2012-02-27 18:41:29
【问题描述】:
我有一个向 WCF 服务发送请求的 WCF 客户端。客户端和服务器都在本地运行。请求包含一个 DateTime 类型的值,该值有一个值(例如 DateTime.Now)。 WCF 客户端代理发送请求。但是,当我在请求发送到服务器之前使用 fiddler 捕获请求时,所有 DateTime 类型的值都会消失。
更新:
我尝试了 DataContractSerializer 和 XmlSerializer 手动序列化 WCF 类(如下所示),结果是 XmlSerializer 省略了 DateTime 值(即 DateTime 值消失),DataContractSerializer 保留该值。
因为 WCF 服务器使用的是 XmlSerializer,并且由于客户端代理类的数量,理想情况下,客户端应该使用 XmlSerializer。
WCF 客户端:
WCF 代理类:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.225")]
[System.SerializableAttribute()]
//[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:core_e-nbp-v1.0")]
public partial class ClaimApplication : object, System.ComponentModel.INotifyPropertyChanged {
private System.DateTime hBEffectiveDateField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(DataType = "date", Order = 3)]
public System.DateTime HBEffectiveDate {
get {
return this.hBEffectiveDateField;
}
set {
this.hBEffectiveDateField = value;
this.RaisePropertyChanged("HBEffectiveDate");
}
}
}
//Assign a random DateTime value
claimApplication.HBEffectiveDate = DateTime.Now.ToUniversalTime();
//manully serialize to check the DateTime using XmlSerializer
XmlSerializer s = new XmlSerializer(typeof(ClaimApplication));
StreamWriter sw = new StreamWriter(@"D:\xmlsamples\XmlSerializer.xml");
s.Serialize(sw,claimApplication);
sw.Dispose();
//manully serialize to check the DateTime using DataContractSerializer
DataContractSerializer dc = new DataContractSerializer(typeof(ClaimApplication));
FileStream fs = new FileStream(@"D:\xmlsamples\DataContractSerializer.xml", FileMode.CreateNew);
dc.WriteObject(fs,claimApplication);
fs.Dispose();
WCF 服务器:
[System.Xml.Serialization.XmlElementAttribute(DataType = "date")]
public System.DateTime EffectiveDate
{
get { return this.EffectiveDateField; }
set { this.EffectiveDateField = value; }
}
有什么想法吗?
【问题讨论】:
标签: c# wcf web-services