NuSOAP WSDL

WSDL是一种用于描述Web Service的XML语言。它是一种机读格式,把所有的访问服务所必须的信息提供给Web Service客户端。

NuSOAP专门提供一个类进行WDSL文件的解析,并且从中提取信息。soapclient对象使用wsdl类来减轻开发者调用服务的难度。

通过WSDL信息的帮助来创建报文,程序员仅仅需要知道操作的名字和参数就能调用它。

通过NuSOAP使用WSDL提供以下几点优点:
o 所有的服务元文件,如命名空间(namespaces),endpoint URLs,参数名(parameter names)等等都可以直接从WSDL文件获得,这样就允许客户端动态的适应服务器端的变化。

因为从服务器随时可以获得,所以这些数据不再需要在用户脚本中使用硬性编码。

o 它允许我们使用soap_proxy类。这个类派生自soapclient类,增加了WDSL文件中详细列出的操作所对应的方法。现在用户通过它可以直接调用这些方法。

o soapclient 类包含一个getProxy()方法,它返回一个soap_proxy类的一个对象。soap_proxy类派生自soapclient类,增加了对应于 WSDL文档中定义的操作的方法,并且允许用户调用一个endpoint的远程方法。这仅仅适用于soapclient对象用WDSL文件初始化的情况。优点是易于用户使用,缺点是性能–PHP中创建对象是耗时的–且不为功利目的服务。[code] //wsdl的一个简单演示文件
include(‘nusoap.php’);

  //SOAP源为一个提供明星生卒年月的service
  //首先我们创建一个soapclient对象,把WSDL文件的URL传递给构造函数,
  //之后还要使用第二个参数以便使client知道我们传递过来的是WSDL,而不是SOAP endpoint。
  $s=new soapclient('http://www.abundanttech.com/webservices/deadoralive/deadoralive.wsdl', 'wsdl');

  //生成proxy类
  $p=$s->getProxy();

  //调用远程函数
  $sq=$p->getTodaysBirthdays();

  if (!$err=$p->getError()) {
  print_r($sq);
  } else {
  print "ERROR: $err";
  }

  print 'REQUEST:<xmp>'.$p->request.'</xmp>';
  print 'RESPONSE:<xmp>'.str_replace('><', ">\n<", $p->response).'</xmp>';

  ?>[/code]