繁体   English   中英

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

[英]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-d\TH:i:s"));

$date->format('c')我甚至把它写成字符串1932-11-12T00:00:00等等。 我没有得到soap异常,但是收到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不会抛出异常)并且它不能正常工作,那么您应该在另一端查找问题,当然。

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

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

更好的解决方案是在Web服务中使用另一个函数(如果存在),它将原始数据类型检索为参数而不是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可能是:

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

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

希望这可以帮助。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM