【发布时间】:2015-01-28 15:14:32
【问题描述】:
我们有一个 WSDL,它是一个基于 PHP 的网络服务。
当 WSDL 包含在 Visual Studio 中时,它会创建其代理类。 这让事情变得简单,我们只需要在代理类属性中设置参数。并调用代理方法。
一切都很顺利,直到特定方法需要 DOB。
当这个链接在浏览器中打开时,我们发现了 XML 格式。
<xsd:element name="DOB" type="xsd:date" minOccurs="0"/>
显然 DOB 要求提供日期数据类型。 但是包含 WSDL 的所有代理组件的 Reference.cs 将其理解为。
private System.DateTime dOBField;
[System.Xml.Serialization.SoapElementAttribute(DataType="date")]
public System.DateTime DOB {
get {
return this.dOBField;
}
set {
this.dOBField = value;
}
}
我们对 C# 的 Date 进行了一些研究。 C# 不知道日期的概念。它只理解 DateTime。
例如。如果我们尝试将字符串解析为日期,让我们将今天的日期设为 28thJan。
string today = "2015-01-28";
DateTime dtToday = DateTime.ParseExact(today , "yyyy/MM/dd", null).Date;
dtToday 的值为 2015-01-28 12:00:00AM。但我们只是要求日期。
现在真正的问题来了每当我们尝试为 DOB 代理属性设置日期时,它都会将其类型转换为 DateTime,例如“2009-02-27 12:12:22PM”
但是 PHP 期待像“2009-02-27”这样的东西。 我们尝试编辑 Reference.cs。它在代理对象初始化时抛出异常。
所以请任何人指导我们一些出路。
提前致谢。
【问题讨论】:
-
顺便问一下
DOB的值是多少?不应该是today吗?