使用PHP和SOAP的Web服务的C#DateTime类型

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

SOAP __getTypes返回一个期望参数为dateTime birthDate 。 我尝试以不同的方式发送参数,比如

 $date = new DateTime("now"); $wsclient->SomeFunction(array($date->format("Ymd\TH:i:s")); 

$date->format('c')我甚至把它写成字符串1932-11-12T00:00:00等等。 我没有得到soapexception,但是收到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("Ymd\TH:i:s")

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

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

几年后:他们根本不知道他们在做什么,我遇到了问题,这是我无法解决的问题。 如果WSDL请求dateTime并且你正确地发送它(SOAP没有抛出exception)并且它不能正常工作,那么你应该在另一边寻找问题,当然。 他们制作了这些以及其他一些技巧,并指责我获得一些时间,因为他们的工作不是完整或不完整。 他们做得很好,因为我是新人,只有一家公司的网络开发人员,我20岁,并且对于那些从我出生以来几乎一直担任开发人员的人并不十分自信。 最后,当我们在项目的最后一部分工作时,他们说我们花了太多时间来完成它并将其交给其他开发人员。 最后一部分很明显,这个项目没有前途,因为架构是错误的。 该项目尚未发布(3年后),尽管他们在列表2公司(我知道)切换到客户端实施它。 这是我职业生涯中最糟糕的机会。

“…我与Web服务的开发人员会面,他向我展示了当他将System.DateTime类型变量传递给它正常工作的函数时,但他在C#中本地完成了……”

您尝试在C#Web服务中调用的函数将System.DateTime对象作为参数。 我在MSDN上查了一下,得知它是一个C#类。 PHP的DateTime类不一样,因此服务可能将PHP的DateTime类的实例识别为无效数据。 我不确定通信如何与C#服务一起工作,但我认为它需要C#System.DateTime对象的二进制表示。 这意味着您可以潜在地研究C#的System.DateTime对象如何以二进制forms表示,并在PHP中手动构造和传递二进制数据。 然而,这是令人难以置信的耗时,你没有保证它将实际工作。

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

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

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

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

然后params可能是:

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

我已经找到了使用PHP的本机DateTime对象的方法,但可以找到更简单的方法。

希望这可以帮助。

只需使用: date('Ymd\TH:i:s', $dob);