在PHP / WSDL中处理复杂类型

时间:2011-04-01 21:10:31

标签: php wsdl

我已经使用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();
?>

0 个答案:

没有答案