Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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
PHP SoapClient调用中的空值_Php_Wcf_Web Services_Null_Soap Client - Fatal编程技术网

PHP SoapClient调用中的空值

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

我正在为C#/WCF web服务编写一个PHP客户端。一些调用的参数包括我在PHP中实例化的业务类实例,并通过SOAP格式的有效负载中的HTTP POST传递给webservice。其中一些类的构造函数有一个或多个可选参数,其中一些是Int32类型的

当我在PHP中将这些参数设置为可选参数,然后将实例发送到webservice时,它们将作为空字符串传输(更具体地说,作为空节点:
,在下面的示例中)。这在以下任一型号中都会发生:

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;
        }
    }
}