我已经使用perl和mySql一天多了,并编写了一个基本的Web服务PHP客户端/服务器来查询数据库并将结果返回给客户端。我有一些使用Java Web服务和JAX-WS的经验。
由于缺少类型,复杂类型的处理与JAX-WS完全不同,因为没有对返回或输入参数进行类型验证。服务器向客户端返回一个多维数组,所有数组都正常工作。
在使用WSDL时,我注意到类型声明没有任何影响,尽管在message元素的part元素中引用了它。我删除了整个类型声明,程序继续正常工作。
我错过了什么,在PHP中是否有使用WSDL来强制执行Web服务合同?
-------客户---------
<?php
// turn off the WSDL cache
ini_set("soap.wsdl_cache_enabled", "0");
$client = new SoapClient("http://localhost/~someuser/apams/apams.wsdl");
$fID = 1;
$franchises = $client->getFranchises($fID);
$rid= $franchises["Franchises"][1]["Id"];
$rdesc= $franchises["Franchises"][1]["Description"];
print("The id: $rid\n");
print("The description: $rdesc\n");
?>
--------- server -------------
<?php
function getFranchises($pfID)
{
$result = mysql_query("SELECT * FROM tbtest where franchiseID=$pfID");
while($row = mysql_fetch_array($result))
{
$rID=$row['franchiseID'];
$rDesc=$row['franchisedDescription'];
}
mysql_close($con);
return array("Franchises" => array(1=> array("Id"=>$rID, "Description"=>$rDesc)) );
}
ini_set("soap.wsdl_cache_enabled", "0");
$server = new SoapServer('apams.wsdl');
$server->addFunction("getFranchises");
$con =mysql_connect("localhost","testuser","******");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
$db_selected=mysql_select_db("testdb", $con);
if (!$db_selected) {
die ('Can\'t use testdb : ' . mysql_error());
}
$server->handle();
?>