C# DateTime type over web service with PHP & SOAP



我使用用 C# 编写的 Web 服务,在我的(客户端)端使用 PHP。

SOAP __getTypes返回要dateTime birthDate的预期参数之一。我尝试以不同的方式发送参数,例如

$date = new DateTime("now");
$wsclient->SomeFunction(array($date->format("Y-m-dTH:i:s"));

或者$date->format('c')我什至把它写成一个字符串1932-11-12T00:00:00等等。我没有收到肥皂异常,但收到birthDate值的函数返回值0001-01-01T00:00:00.

我与 Web 服务的开发人员会面,他向我展示了当他将类型变量传递给函数时System.DateTime它可以正常工作,但他在本地用 C# 而不是通过 Web 服务完成,只是在

date = new DateTime(1999,9,9,0,0,0);
SomeFunction(date);

我想知道的是我如何从 PHP 传递 c# DateTime 类型。我想我用$date->format('c')$date->format("Y-m-dTH:i:s")做对了.

我只想确保这部分代码是正确的,如果是这样,请在其他地方搜索问题。

更新:我们得出的是:他们改变了代码。数据类型保持不变(日期时间),我不知道他们在那里做了什么,但是如果我得到任何信息,我会保持这篇文章的最新状态。

几年后:他们只是不知道他们在做什么,我遇到了一个问题,这个问题在我身边是不可能解决的。如果 WSDL 请求DateTime并且您正确发送了它(SOAP 不会引发异常)并且它无法正常工作,那么您应该在另一端寻找问题,这是肯定的。

"...我与 Web 服务的开发人员开会,他向我展示了当他将类型变量传递给函数时System.DateTime它可以正常工作,但他在本地用 C# 做了......"

尝试在 C# Web 服务中调用的函数将System.DateTime对象作为参数。我在 MSDN 上查找了它,了解到它是一个 C# 类.PHP的 DateTime 类并不相同,因此该服务可能将 PHP 的 DateTime 类的实例识别为无效数据。我不确定通信如何与 C# 服务一起工作,但我假设它需要 C# System.DateTime 对象的二进制表示形式。这意味着您可以调查 C# 的 System.DateTime 对象如何以二进制表示,并在 PHP 中手动构造和传递二进制数据。然而,这是非常耗时的,而且您不能保证它真的会起作用。

更好的解决方案是在 Web 服务中使用另一个函数(如果存在),该函数检索 primitime 数据类型作为参数,而不是特定于 C# 的类。一个例子是 Web 服务中的类似函数,该函数检索 Unix 时间戳(在 PHP 中:time()),该函数可用于创建自己的 System.DateTime C# 对象。另一个例子可能是从格式化字符串中检索日期的函数(例如"dd.mm.yyy H:i:s")。

如果您能够停用 Web 服务开发人员的本地代码/示例(您提到的代码/示例)并将其发布在此处,那么会更容易为您提供帮助。

对于我们使用的一个 Web 服务,该服务允许使用 DateTime 对象通过 createdAt 时间戳过滤条目。我发现使用它可能有点笨拙,但是:

$date = new stdClass();
$date->DateTime = '2012-01-01T00:00:00Z';
$date->OffsetMinutes = -480; // Los Angeles offset also can just be set to NULL

那么参数可以是:

$params = array(
 'birthDate' => $date
);

我一直在寻找使用 PHP 原生 DateTime 对象的方法,但可以找到更简单的方法。

希望这有帮助。

只使用:date('Y-m-dTH:i:s', $dob);

最新更新