您好,欢迎访问一九零五行业门户网

知道服务器端Wsdl,不写服务端代码,仅写客户端代码能调用服务端的方法吗?

新手请教,望高手朋友不吝赐教,无比感谢中。
今天一大早开始研究webservice,有一本不太专业的参考书,随便找了一个服务端的wsdl,想调用其中的方法,结果搞了一天,无果,老报错,郁闷。
代码如下:
'gb2312'));
$param=array('thestockcode'=>'sh600031');
$result = $client->__soapcall('getstockinfobycode',$param);
$jg=$result->getstockinfobycoderesult;
print_r($jg); 
?>
就这么些,不多,没有服务端代码,soap模块什么的都已打开能检测到,用的是apache+php+mysql;连java都没装,一个方向就是专心搞php,运行后出现错误提示:fatal error: uncaught soapfault exception: [soap:server] 服务器无法处理请求。 ---> 未将对象引用设置到对象的实例。 in c:\program files\6000345.php:4 stack trace: #0 c:\program files\6000345.php(4): soapclient->__soapcall('getstockinfobyc...', array) #1 {main} thrown in c:\program files\6000345.php on line 4
回复讨论(解决方案)
本帖最后由 xuzuning 于 2013-03-05 08:03:50 编辑
...$param = array('thestockcode'=>'sh600031');$result = $soapclient->__soapcall('getstockinfobycode', array($param));
或 ...$param=array('thestockcode'=>'sh600031');$result = $soapclient->getstockinfobycode($param);print_r($result->getstockinfobycoderesult);
stdclass object
(
    [string] => array
        (
            [0] => sh600031
            [1] => 三一重工
            [2] => 2013-03-04 15:03:08
            [3] => 10.77
            [4] => 11.78
            [5] => 11.70
            [6] => -1.01
            [7] => 10.60
            [8] => 11.70
            [9] => -8.57%
            [10] => 1208965.54
            [11] => 131792.9891
            [12] => 10.78
            [13] => 10.79
            [14] => 9.42%
            [15] => 10.78 / 517.00
            [16] => 10.77 / 855.00
            [17] => 10.76 / 744.00
            [18] => 10.75 / 627.40
            [19] => 10.74 / 935.00
            [20] => 10.79 / 309.50
            [21] => 10.80 / 2509.34
            [22] => 10.81 / 137.00
            [23] => 10.82 / 50.00
            [24] => 10.83 / 39.00
        )
) 首先,谢谢朋友的热情回复,我先试试。
原码如下,其中参考了朋友指点的代码写法'gb2312'));
$param = array('thestockcode'=>'sh600031');
 $result = $soapclient->getstockinfobycode($param);
print_r($result->getstockinfobycoderesult);
?>
照朋友教的,运行后,有如下错误提示。
fatal error: call to a member function getstockinfobycode() on a non-object on line 4
soapclient
你的命名是$client
soapclient与$client,一个是实例化对象, 一个是变量名称,这点我还分得清楚,在程序里也没有混淆。我现在的疑惑是,自己的代码有语法错误,还是引用对象不规范。又或者是wsdl文件路径问题,我头都大了,没有头绪,好难,其实目标简单,就是将股票价格显示在客户端,有谁最好亲自试下,然后给出结果。再次感谢。
soapclient与$client,一个是实例化对象, 一个是变量名称,这点我还分得清楚,在程序里也没有混淆。我现在的疑惑是,自己的代码有语法错误,还是引用对象不规范。又或者是wsdl文件路径问题,我头都大了,没有头绪,好难,其实目标简单,就是将股票价格显示在客户端,有谁最好亲自试下,然后给出结果。再次感谢。
哦?是么。你区分清楚了?
这是什么?:
$client = new soapclient('http://www.webxml.com.cn/webservices/chinastockwebservice.asmx?wsdl',array('encoding'=>'gb2312'));
$param = array('thestockcode'=>'sh600031');
 $result =  $soapclient->getstockinfobycode($param);
print_r($result->getstockinfobycoderesult);
明显应该是: $result =  $client->getstockinfobycode($param);
试过了,还是不行,fatal error: uncaught soapfault exception: [http] unable to parse url in c:\program files\apache software foundation\apache2.2\htdocs\createsoap\600033.php:15 stack trace: #0 [internal function]: soapclient->__dorequest('__soapcall('getstockinfobyc...', array) #2 {main} thrown 这么长的错误提示不知如何是好了。,
结贴。找到原因。php真他娘的弱,在远程服务器端调用天气预报接口成功,同样的写法调用股票接口却错误频出,新手无耐,只能啃书,书海茫茫,毫无头绪,不是不下功夫,只是搜索范围太广,不知如何是好,还好,运气来了,原来web调用真的很简单,想要的东西出来了,原来只有三四行脚本,但苦了我很多日子。找到wsdl,然后用语句$client = new soapclient 加载它,这是关键的一步,接下来就是引用其中的方法了,我走了很多弯路,导致我以为自己走的路全错了。如:$param = array('thecityname'=>南阳);
$result = $client->__soapcall('getweatherbycityname',array('paramters'=>$param));
成功,但换成股票接口wsdl,引用其中方法,正确传参后,失败,反复试验,终于找到解决方法,原来是数组问题,不应用以上写法,换一种写法传参就很顺利拿到东西了
如:$param = array('thecityname'=>南阳);
$result = $client->__soapcall('getweatherbycityname',array('paramters'=>$param));
成功,但换成股票接口wsdl,引用其中方法,正确传参后,失败,反复试验,终于找到解决方法,原来是数组问题,不应用以上写法,换一种写法传参就很顺利拿到东西了
请楼具体说下换成怎样的方法传参才能成功,谢谢!!!
最近也在研究soap,希望楼主指点一二,谢谢!!!
结贴。找到原因。php真他娘的弱,在远程服务器端调用天气预报接口成功,同样的写法调用股票接口却错误频出,新手无耐,只能啃书,书海茫茫,毫无头绪,不是不下功夫,只是搜索范围太广,不知如何是好,还好,运气来了,原来web调用真的很简单,想要的东西出来了,原来只有三四行脚本,但苦了我很多日子。找到wsdl,然后用语句$client = new soapclient 加载它,这是关键的一步,接下来就是引用其中的方法了,我走了很多弯路,导致我以为自己走的路全错了。如:$param = array('thecityname'=>南阳);
$result = $client->__soapcall('getweatherbycityname',array('paramters'=>$param));
成功,但换成股票接口wsdl,引用其中方法,正确传参后,失败,反复试验,终于找到解决方法,原来是数组问题,不应用以上写法,换一种写法传参就很顺利拿到东西了
找到wsdl,然后用语句$client = new soapclient 加载它,这是关键的一步,接下来就是引用其中的方法了,
为什么我引用不了其中的方法啊 ,求楼主赐教啊

其它类似信息

推荐信息