太感谢了,这是第一次用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 访问此网上论坛。

回复