Я пишу PHP-клиент для веб-службы C # / WCF. Параметры для некоторых вызовов состоят из экземпляров бизнес-классов, которые я создаю в PHP и передаю через HTTP POST в полезных нагрузках, отформатированных в SOAP, веб-службе. Конструкторы для некоторых из этих классов имеют один или несколько необязательных параметров, некоторые из которых имеют тип Int32.
Когда я устанавливаю эти параметры как необязательные в PHP, а затем отправляю экземпляры в веб-сервис, они передаются в виде пустых строк (ну, точнее, в виде пустых узлов: <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;
}
}
}
Как только этот объект попадает в веб-сервис, C # не может его опустошить, сказав The value '' cannot be parsed as the type 'Int32'
.
Если я по умолчанию установлю значение 0, тогда все будет работать нормально (как я и ожидал, учитывая сообщение об ошибке). Проблема заключается в том, что веб-сервис имеет бизнес-логику для установки значений по умолчанию, если они не предоставлены, и я не хочу воспроизводить эту логику в моем клиенте.
Есть ли способ указать SoapClient PHP не отправлять нулевые свойства вообще, если они не установлены, вместо отправки пустого узла?