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