2010年7月19日星期一

Re: [PerlChina] 请教用SOAP::Lite调用 SOAP/WSDL服务的问题

直接贴代码了,申请了 loc-aid 的 classid, 但是还没给下来,貌似蛮麻烦的,人工审核?我就想测试一下而已。

use strict;
use Data::Dumper;
#use SOAP::Lite +trace => [qw /all -objects/ ];   # 调试时用这行代替下面的吧
use SOAP::Lite;


# 这个我是根据它官方站点的说明上那个请求样例来构造的
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 => 'bogus@loc-aid.com'),
                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 酒窝 <cloud.liuzj@gmail.com>
关于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 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。


--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

没有评论: