小弟最近在做一个webservice和别人交互数据,对方给我提供了wsdl文件我按照wsdl文件部署了一个webservice然后问题来了客户端在调用我的webserivce的时候会请求我的wsdl文件我调用SOAP_DISCO_Server开放了一个返回wsdl文件的接口.这时客户端要求我按照文档样式返回我的wsdl文件.而getWSDL()方法返回的wsdl文件是rpc样式的以下是我的服务端代码<?php
  require_once("AccountService.php");
  require_once("SOAP/Server.php");
  
  $account = new AccountService();
  $server = new Soap_Server();
  
  $server->addObjectMap($account, "urn:AccountService");
  if (isset($_SERVER['REQUEST_METHOD']) &&  $_SERVER['REQUEST_METHOD']=='POST')
  {
      $server->service($GLOBALS['HTTP_RAW_POST_DATA']);
  }
  else
  {
    require_once 'SOAP/Disco.php';
      $disco = new SOAP_DISCO_Server($server,'AccountService');
      header("Content-type: text/xml");
      if (isset($_SERVER['QUERY_STRING']) && strcasecmp($_SERVER['QUERY_STRING'],'wsdl')==0) 
   {
          echo $disco->getWSDL();
      }
   else 
   {
          echo $disco->getDISCO();
   }
  }
  exit;
?>有两个问题:
1. 这个样式是在哪里指定的,是在客户端请求时指定的还是在我服务器端生成wsdl文件的代码里指定的呢2. 如果是在服务器端指定,那么应该如何指定呢..小弟乃新近末学,此问题困扰我好几天了,遍寻PEAR在线文档仍未能解决,请有经验的朋友指点

解决方案 »

  1.   

    记得《XML从入门到精通》里有写过。
    WSDL是写到服务器端的,是指定两服务器脚本不同函数,变量类型对应的表。
    是先被定义到服务器端的,当客户端通过指定的sokect访问服务器时,服务器会对访问进行解释。
    因此
    1。由客户端访问并指定服务器上的WSDL文件。
    2。不知道。。
    建议使用NuSphere的SOAP连接会有较多帮助信息。