我正在尝试使用WCF从.NET 3.5调用Web服务。我目前得到的错误是
从另一方收到了无担保或不正确安全的故障。请参阅内部FaultException以获取故障代码和详细信息。
InnerException:{“millisOfSecond的值-2147483648必须在[0,999]范围内}}
我把它缩小到我发送的两个日期值。当我通过soapUI创建请求时,以这种格式发送日期值:
2010-07-19T00:00:00.000Z
一切正常,但是当我从.NET调用服务时,它会以这种格式发送日期
2010-07-19T00:00:00
并导致上述错误。如果我在soapUI中发送不正确的日期,我会收到相同的错误消息。请注意,这些日期是必填字段,因此如果我什么都不发送它会将默认日期设置为0001-01-01T00:00:00,这显然仍然是错误的格式。
如何控制将日期发送到网络服务的方式?
答案 0 :(得分:4)
不确定是否有更简单的方法(尚未找到它,但是,如果它存在) - 但这样做的一种方法是引入一个字符串字段,正确格式化您的日期,然后避免序列化直接使用日期字段,而是序列化格式化字符串:
public partial class YourDataClass
{
public DateTime YourDate { get; set; }
[DataMember(Name="YourDate")]
public string FormattedDate
{
get { return string.Format("{0:yyyy-MM-ddTHH:mm:ss.fffZ}", YourDate);
set { ; }
}
}
这样,DateTime
字段YourDate
将不会被序列化(没有[DataMember]
属性 - 假设您在WCF中使用DataContract序列化程序),而格式化日期字符串将以正确的格式序列化为YourDate
。