我正在尝试创建一个简单的 php Soap 服务器。
问题是虽然我在 wsdl 文件中设置了特定的参数类型,但在我的情况下我设置了整数,我可以从 php 使用另一种参数类型(字符串、数组、关联数组)进行方法调用。
理论上,如果php参数类型和wsdl参数类型不一样应该不会报错吧?就我而言,如果我在服务器上用数组调用函数,我得到数组,我在服务器上用字符串调用相同的函数,我得到字符串等。
我如何编辑下面的代码,使我的方法“doMyBookSearch”只接受在 wsdl 上声明的整数。
客户代码:
try{
$sClient = new SoapClient('sample.wsdl',array('trace'=>true));
print_r($sClient->doMyBookSearch('test')); //I call the function with a string, and not integer as WSDL
} catch(SoapFault $e){
var_dump($e);
}
服务器代码:
$server = new SoapServer("sample.wsdl");
function doMyBookSearch($yourName){
return 'Works'; //return string
}
WSDL:
<types>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:MyBookSearch">
<xsd:element name="bookTitle">
<xsd:simpleType>
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="0"/>
<xsd:maxInclusive value="120"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:schema>
</types>
<message name="doMyBookSearch">
<part name="bookTitle" type="tns:bookTitle" />
</message>
<message name="doMyBookSearchResponse">
<part name="return" type="xsd:string" />
</message>
<portType name="MyBookSearchPort">
<operation name="doMyBookSearch">
<input message="tns:doMyBookSearch" />
<output message="tns:doMyBookSearchResponse" />
</operation>
</portType>