我正在为C#/ WCF Web服务编写PHP客户端。一些调用的参数由我在PHP中实例化的业务类实例组成,并通过SOAP格式的有效载荷中的HTTP POSTs传递给Web服务。其中一些类的构造函数具有一个或多个可选参数,其中一些参数的类型为Int32。PHP SoapClient中的空值调用
当我在PHP中将这些参数设置为可选参数,然后将实例发送到webservice时,它们将作为空字符串(具体来说,如下面示例中的空节点:<ns1:order />
)进行传输。这发生在以下任一型号:
class ThingOne {
/**
* @var string $name
*/
/**
* @var int $order
*/
__construct($name, $order = null) {
$this->name = $name;
$this->order = $order;
}
}
或
class ThingOne {
/**
* @var string $name
*/
/**
* @var int $order
*/
__construct($name, $order = null) {
$this->name = $name;
if(isset($order) {
$this->order = $order;
}
}
}
一旦对象获取到web服务,C#不能deserilize了,他说The value '' cannot be parsed as the type 'Int32'
。
如果我默认值为0,那么一切正常(如我所料,给出错误信息)。问题在于,如果Web服务没有提供,那么Web服务具有业务逻辑来默认这些值,并且我不想在客户端中重现该逻辑。
有什么办法可以指示PHP的SoapClient不发送空属性,如果它们没有设置,而不是发送一个空节点?