本帖最后由 MoreQuestion 于 2013-05-13 07:35:48 编辑

解决方案 »

  1.   


    $strdbServerModStatusIp ="10.XXX.XX.XX";//URL
    $serviceURL = "http://" . $strdbServerModStatusIp . ":56789";
    $soap = new nusoap_client($serviceURL . "?WSDL");
    $parameters=array("a"=>aaa,"b"=>bbb);
    $str=$soap->call("DDPServiceProc", $parameters); //方法名&参数
     
    if (!$err = $soap->getError()) {
        echo " return :", $str;
    } else {
        echo " false :", $err;
    }
      

  2.   

    我用的是NUSOAP 你如果用的是PHP自带的soap类 就把方法名替换下就行了 
      

  3.   

    我要的是验证。WebService已经是全部人可以了。但我要认证。
      

  4.   

    给你一个简单的例子(我喜欢用gbk字符集,所以代码中有字符编码处理)
    服务端 soap_s.phpfunction auth($s){
    if($s != 'kyzy'){
            throw new SoapFault('auth', "$s ".iconv('gbk', 'utf-8', '您无权访问'));
    }
    return $s;
    }function say($s){
    return 'Hi'.$s;
    }$server = new SoapServer(null, array('uri' => ''));
    $server->addFunction('say');
    $server->addFunction('auth');
    $server->handle();客户端 saop_c.php$client = new SoapClient(null, array('uri' => '', 'location' => 'http://localhost/soap/soap_s.php', 'trace' => true, 'encoding'=>'GBK'));
    $data  = 'kyzy';
    $header = new SoapHeader('http://localhost', 'auth', $data, false, SOAP_ACTOR_NEXT);
    $client->__setSoapHeaders(array($header));
    try {
        echo $client->say('www');
    } catch (Exception $e) {
        echo $e->getMessage();
    }通常 SoapHeader 验证方法不会出现在 WSDL 中,所以验证方法名和验证数据需要双方私下约定
    每次 soap 方法的执行,验证都会自动执行
      

  5.   


    多谢版主,现在有一个问题。.NET调用它就麻烦了……
      

  6.   

    我给的测试代码是为了帮助你理解 SoapHeader 的工作流程的
    至于 .NET 中如何使用 SoapHeader,那就要到 .NET 版面问了
    但 SoapHeader 的原理都是一样的
      

  7.   


    PHP下试了,可以发送验证。多谢版主。
      

  8.   


    版主大人,$server = new SoapServer(null, array('uri' => '')); 你这句不用指定信息的?WSDL文件?请问你这种方式是怎么说呢?
      

  9.   

    WSDL 是给客户端看的,有没有都可以。但有了就要受他约束
    有 wsdl 的服务端基本是这个样子
     $server = new SoapServer(   
      "http://localhost/soap/passport.wsdl"   
      ,array(   
      'encoding'=>'utf-8',   
      'soap_version' => SOAP_1_2,   
      'uri' => 'Passport',   
      'style' => SOAP_RPC,   
      'use' => SOAP_LITERAL)   
      );   
    php 没有 WSDL 书写工具,手工写起来很麻烦的
      

  10.   


    没有WSDL的情况下,调用的客户是直接用$obj->Hander()这个文件?
      

  11.   

    Hander 是什么?已经说过了,WSDL 有没有都无所谓
    服务器可以通过 WSDL(一个周知的说明文件) 通知客户,它提供了哪些服务,如何调用及返回的是什么如果客户已经知道了,那么 WSDL 就形同须设了
      

  12.   

    有不少 soap 开发工具可以通过 WSDL 自动生成客户端程序
      

  13.   


    受教了。例如,我有一个类
    class A
    {
    function AA()
    {}
    }我建立SOAPServer的时候,参数如何写?
    调用的时候呢?
      

  14.   


    这样写SOAPServer,其他语言无法调,只能在PHP调用。
      

  15.   


    如果没有WSDL,例如NET调用根本不知道你返回什么类型。