本帖最后由 kyzy_yy_pm 于 2011-08-02 17:23:16 编辑

解决方案 »

  1.   

    $s==‘kyzy’?那【2】怎么进去?
      

  2.   

    我的 client传递的是kyzy,如果server端判断$s != 'kzyy'那么久抛出错误
      

  3.   

    你认为应得到什么结果?
    php 的 soap 不支持 WSDL 生成,一般只适合做客户端
      

  4.   

    是啊.php的soap.有强人,完善下就好了.不过nusoap有wsdl生成的,简单的也能用,性能差些罢了
      

  5.   


    老大,不知道为什么出现下面的情况function say($s){
         //这里能得到$s
        if($s != 'kyzy'){
            //这里不能得到,其实在上面if判断中就已经得不到$s了
            throw new SoapFault('auth', $s);
        }
        return 'Hi';
    }
      

  6.   

    我是用那种非wsdl文件传输方式的
      

  7.   

    其实我一直没弄明白 SoapHeader 的作用
      

  8.   

    我也是,我想是不是类似一般请求的header头信息
      

  9.   

    http://ytsmsjh.blog.163.com/blog/static/373165532010931615747/
      

  10.   

    try {
        echo $client->say();
    } catch (Exception $e) {
        echo $e->getMessage();
    }
    --------------------------------------------------------
    所谓soap,就是普通http post,只不过请求头,和请求body有些差异.
    只要你设置了soapheader,那么一个具体的soap请求就会拼接上soapheader,换句话说,say是soapserver自动会触发到的验证函数.
      

  11.   

    echo $client->say();
    --------------------
    say不是一个可以请求的方法
      

  12.   

    server : 
    ===============================
    function say($s){
    //【1】
        if($s != 'kyzy'){//【2】
            throw new SoapFault('[User invaild:'.$s.']', 'access deny!');
        }
    }function talk(){

    return "hello world";
    }
    $server = new SoapServer(null, array('uri' => 'http://localhost'));
    $server->addFunction('say');
    $server->addFunction('talk');
    $server->handle();client:
    ==================================
    $client = new SoapClient(null, array('uri' => 'http://localhost', 'location' => 'http://localhost/soap/soapserver3.php', 'trace' => true));
    //$data    = array('username' => 'kyzy');
    $data    = 'kyzy';
    $header    = new SoapHeader('http://localhost', 'say', $data, false,SOAP_ACTOR_NEXT);$client->__setSoapHeaders(array($header));try {
        //echo $client->say();
        echo $client->talk();
    } catch (Exception $e) {
       echo "Your soap request were :<br/>".htmlspecialchars($client->__getLastRequest());
       echo "<br/>===============<br/>";
       echo "Your soap response were:<br/>".htmlspecialchars($client->__getLastResponse());
    }
      

  13.   

    是什么意思,能说说吗,这个$server->addFunction('say');不可设置成为可以请求的吗
      

  14.   

    function say($s){
    //这里有$s
    if($s == ''){//这里却没了,就连if中都没法用,无论是$s亦或者是!$s都不成立
    throw new SoapFault('safd', 'zhe shi wsm ne');
    }
    return 'Hi';
    }
      

  15.   

    say不是soap客户端可以请求的一个server方法,这个say你是设置在了soapHeader里的,所以只要server存在这个验证方法,在你请求talk函数的时候,soap server端就会自动先执行say方法。
    整个http请求头以及body类似以下:
    #http请求头
    Post:/s.php Http/1.1
    Content-length:xxx
    Connection:close#http请求body
    <soap:Envelope>
    <soap:Header>
    <!--这里带上say,soap server就知道要先执行say方法进行验证-->
    </soap:Header>
    <soap:Body>
    <!--这里带上talk,这个才是soap客户端可以$soap->call的方法-->
    </soap:Body>
    </soap:Envelope>