Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用PHP和;肥皂_C#_Php_Web Services_Datetime_Soap - Fatal编程技术网

C# 使用PHP和;肥皂

C# 使用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异常,但

我使用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异常,但函数返回接收到的
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将常规整数传输到服务函数吗?当然,这是可能的,但他们必须更改代码。最后,我决定要求他们更新代码。我在寻找当前情况下的解决方案时发布了这个问题。如果我要求他们更新代码,我应该有一个非常好的参数。