我有一个通过 SOAP 获取数据记录的简单应用程序。SOAP Web 服务是通过“服务引用”添加到项目中的。通话工作正常。0000-00-00
当数据保存参考代码将存储到DateTime
-object中的日期值时,我只是遇到了问题。该类DateTime
已经预见了一个最小值,0001-0-01
该最小值最终会在反序列化来自 SOAP 调用的响应时导致错误。
为通过 SOAP 提取数据而执行的代码如下:
TopixSOAP.TOPIXRPCClient soap = new TopixSOAP.TOPIXRPCClient();
soap.GetProjekt(out error_code, out start_date, out end_date, instance, user, passwd, project_number);
因此,我向 SOAP 调用提供了必要的信息,如果 start_date 和 end_date 是 => ,它会很好地执行0001-01-01
。但是由于数据有时包含应用程序日期的值,因此在将值反序列化为对象0000-00-00
时自然会崩溃。DateTime
我试图将所有输出参数包装到一个名为 TopixProject 的单独类中:
public class TOPIXProject
{
public TOPIXProject()
{
}
public string ErrorCode
{
get
{
return ErrorCode;
}
set
{
ErrorCode = value;
}
}
public DateTime StartDate
{
get
{
return StartDate;
}
set
{
StartDate = DateTime.MinValue;
}
}
public DateTime EndDate
{
get
{
return EndDate;
}
set
{
EndDate = DateTime.MinValue;
}
}
这里修改后的调用:
soap.SOAP_GetProject(out p.ErrorCode, out p.StartDate, out p.EndDate, instance, user, passwd, project_number);
该类应该将值设置为,DateTime.MinValue
这样我就不会再收到错误了。它没有按我的意图工作:类的成员TOPIXProject
不能用作函数的 out 或 ref 参数。
如果我提供了在 SOAP 调用之前声明的“原始”变量,那么如果日期在类定义的有效范围 (=> 0001-01-01
)内,它就会起作用:DateTime
string error_code = "";
DateTime start_date, end_date;
soap.GetProjekt(out error_code, out start_date, out end_date, instance, user, passwd, project_number);
但是我有很多数据记录,其中日期是0000-00-00
无法更改的(这是不可终止项目的内部标记)。那么我需要做什么才能获得有效的 SOAP 响应呢?
- 主要是如果数据集的日期是
0000-00-00
我想得到一个DateTime.MinValue
- 或者我可以告诉服务引用将所有内容解释为字符串吗?(因为服务引用自己构建代码并尝试将 xsd:date 类型解析为 DateTime,这在我的情况下非常糟糕)
编辑:
我现在使用来自服务引用的部分 SOAP 调用(基本上所有没有传回日期的地方)。对于其余部分,我实现了一个 SOAPHelper 类,该类提供对 SOAP 端点的必要调用,并主要返回字符串或 XML。代码示例在这里