太感谢了,这是第一次用Perl来调用web service, 我也没CLASSID的,只是用来做些简单的测试,
On 7月20日, 上午10时12分, cnhack TNT <[email protected]> wrote: > 直接贴代码了,申请了 loc-aid 的 classid, 但是还没给下来,貌似蛮麻烦的,人工审核?我就想测试一下而已。 > > use strict; > use Data::Dumper; > #use SOAP::Lite +trace => [qw /all -objects/ ]; # 调试时用这行代替下面的吧 > use SOAP::Lite; > > my $uri = 'http://webservice.portico.locaid.net/'; > my $WSDL = > 'https://ws.loc-aid.net:443/webservice/LatitudeLongitudeServices?wsdl'; > > # 这个我是根据它官方站点的说明上那个请求样例来构造的 > my $serializer = SOAP::Serializer->new(); > $serializer->envprefix('soapenv'); > $serializer->register_ns($uri, 'web'); > > my $method = SOAP::Data > ->prefix('web') > ->name('getLocationsX'); > > my $soap = SOAP::Lite > ->serializer($serializer) > ->readable(1) # 调试时方便阅读,生产机可以去掉 > ->uri('http://webservice.portico.locaid.net/') > ->proxy("$WSDL"); > > # 同样,这些参数来自官方样例,但是还是得自己申请 classid, 不然结果是杯具 > my @params = ( > SOAP::Data->name(login => '[email protected]'), > SOAP::Data->name(password => 'blahblah'), > SOAP::Data->name(classId => '0O0O0'), > SOAP::Data->name(msisdnList => 16509880432), > SOAP::Data->name(coorType => 'DECIMAL'), > SOAP::Data->name(locationMethod => 'CELL'), > SOAP::Data->name(syncType => 'SYN'), > SOAP::Data->name(overage => 1), > SOAP::Data->name(delayTime => 500), > ); > > my $result = $soap->call($method => @params); > die $result->faultstring if $result->fault; > > print Dumper $result->result; > > 输出的结果是: > > $VAR1 = { > 'transactionId' => '3694635', > 'error' => { > 'errorCode' => '00001', > 'errorMessage' => 'Invalid or inactive user' > } > }; > > 好奇一般情况下的结果是啥,楼主有 classid 不妨借我玩玩?哈哈 > > 2010/7/19 酒窝 <[email protected]> > > > > > 关于Perl调用SOAP::WSDL协议的web service,想请教一下, > > > 我的代码是这样的 > > > my $WSDL = 'https://ws.loc-aid.net:443/webservice/ > > LatitudeLongitudeServices?wsdl'; > > my $soap = SOAP::Lite > > -> uri('http://webservice.portico.locaid.net/') > > -> proxy("$WSDL"); > > > my $method = SOAP::Data->name('getLocation'); > > > my @params = ( SOAP::Data->name(login => '3'), > > SOAP::Data->name(password => '4'), > > SOAP::Data->name(classId => '4'), > > SOAP::Data->name(msisdn => 111111111111), > > SOAP::Data->name(coorType => 'DMS'), > > SOAP::Data->name(locationMethod => > > 'LEAST_EXPENSIVE'), > > SOAP::Data->name(overage => 1), ); > > my $result = $soap->call($method => @params)->result; > > > 中间没有报错,但$result 总是为undefined, > > 我把 $soap->call($method => @params) 这一步的结果dump出来的时候总是会看到500 internal > > server error,但service肯定是好的,我用其他语言可以调用成功,比方说c#。 > > > 不知道是什么原因,请各位帮忙我看看是哪里出错了,谢谢了 > > > -- > > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。 > > 要向此网上论坛发帖,请发送电子邮件至 [email protected]。 > > 要取消订阅此网上论坛,请发送电子邮件至 > > [email protected]<perlchina%[email protected]> > > 。 > > 若有更多问题,请通过http://groups.google.com/group/perlchina?hl=zh-CN访问此网上论坛。- > > 隐藏被引用文字 - > > - 显示引用的文字 - -- 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。 要向此网上论坛发帖,请发送电子邮件至 [email protected]。 要取消订阅此网上论坛,请发送电子邮件至 [email protected]。 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
