C# 使用PHP和;肥皂
我使用C#编写的web服务,在(客户端)使用PHP SOAPC# 使用PHP和;肥皂,c#,php,web-services,datetime,soap,C#,Php,Web Services,Datetime,Soap,我使用C#编写的web服务,在(客户端)使用PHP SOAP\uuu 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异常,但
\uuu 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
type。我想我用$date->format('c')
或$date->format(“Y-m-d\TH:I:s”)
做得不错
我只是想确保这部分代码是正确的,如果是这样的话,在其他地方搜索问题
更新:我们得出的结论是:他们更改了自己的代码。数据类型保持不变(DateTime),我不知道他们在那里做了什么,但如果我得到任何信息,我会让这篇文章保持最新
几年后:他们根本不知道自己在做什么,我陷入了一个无法解决的问题。如果WSDL请求DateTime
,并且您正确地发送了它(SOAP不会抛出异常),但它不能正常工作,那么您肯定应该在另一端查找问题
“…我与web服务开发人员举行了一次会议,他向我展示了当他将System.DateTime
类型变量传递给函数时,它可以正常工作,但他是在C#中本地执行的…”
您试图在C#web服务中调用的函数将System.DateTime
对象作为参数。我查了一下,发现这是一门C级课程。PHP的不一样,因此服务可能会将PHP的DateTime类的实例识别为无效数据。我不确定如何使用C#服务进行通信,但我假设它需要C#System.DateTime对象的二进制表示。这意味着您可以研究C#的System.DateTime对象是如何用二进制表示的,并在PHP中手动构造和传递二进制数据。然而,这是难以置信的耗时,而且您无法保证它会真正起作用
更好的解决方案是在web服务中使用另一个函数(如果存在的话),该函数将原始数据类型作为参数而不是特定于C#的类进行检索。例如,web服务中的一个类似函数检索Unix时间戳(PHP:),该函数可用于创建自己的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-d\TH:i:s',$dob)代码>是否有关于所需格式的生日的SOAP API文档?@JasonMcCreary这是个问题,没有。他们只是说这是C#中的默认日期时间
类型。这是预期的答案,我也做了同样的研究。在我考虑构建系统时,我还要求他们考虑使用Unix时间戳的变体。DateTime
对象将过于复杂。即使我这样做了,我想我也无法通过SOAP发送它,因为SOAP预期的DateTime类型将不同,它将抛出一个异常。感谢您的时间和意见。Unix时间戳只是整数,难道不可能通过SOAP将常规整数传输到服务函数吗?当然,这是可能的,但他们必须更改代码。最后,我决定要求他们更新代码。我在寻找当前情况下的解决方案时发布了这个问题。如果我要求他们更新代码,我应该有一个非常好的参数。