PHP SoapClient调用中的空值
我正在为C#/WCF web服务编写一个PHP客户端。一些调用的参数包括我在PHP中实例化的业务类实例,并通过SOAP格式的有效负载中的HTTP POST传递给webservice。其中一些类的构造函数有一个或多个可选参数,其中一些是Int32类型的 当我在PHP中将这些参数设置为可选参数,然后将实例发送到webservice时,它们将作为空字符串传输(更具体地说,作为空节点:PHP SoapClient调用中的空值,php,wcf,web-services,null,soap-client,Php,Wcf,Web Services,Null,Soap Client,我正在为C#/WCF web服务编写一个PHP客户端。一些调用的参数包括我在PHP中实例化的业务类实例,并通过SOAP格式的有效负载中的HTTP POST传递给webservice。其中一些类的构造函数有一个或多个可选参数,其中一些是Int32类型的 当我在PHP中将这些参数设置为可选参数,然后将实例发送到webservice时,它们将作为空字符串传输(更具体地说,作为空节点:,在下面的示例中)。这在以下任一型号中都会发生: class ThingOne { /** * @va
,在下面的示例中)。这在以下任一型号中都会发生:
class ThingOne {
/**
* @var string $name
*/
/**
* @var int $order
*/
__construct($name, $order = null) {
$this->name = $name;
$this->order = $order;
}
}
或
一旦该对象到达Web服务,C#就无法对其进行反序列化,说值“”不能被解析为类型“Int32”
如果我将该值默认为0,则一切正常(正如我所期望的,给出了错误消息)。问题是,如果没有提供这些值,webservice有业务逻辑来默认这些值,我不想在我的客户机中重现这些逻辑
是否有任何方法可以指示PHP的SoapClient在未设置空属性的情况下不发送空属性,而不是发送空节点?经过仔细分析后,我确定此问题存在于服务的WSDL定义中-一些业务逻辑可选属性在WSDL中未标记为nillable,在这种情况下,SoapClient(完全正确)传递一个空节点 当WSDL正确地将属性定义为nillable时,当该属性设置为null时,节点被标记为
nil=“true”
,并且不会在端点上显示为空字符串
class ThingOne {
/**
* @var string $name
*/
/**
* @var int $order
*/
__construct($name, $order = null) {
$this->name = $name;
if(isset($order) {
$this->order = $order;
}
}
}