【SOAP::Lite模块用例】Perl调用.NET 的 webservice

【SOAP::Lite模块用例】Perl调用.NET 的 webservice

最近一个Perl写的Server需要去调用公司的SSO认证,她们是以 .net 的 webservice方式提供服务的。具体访问就是走SOAP的方式。

跨主机远程函数调用,并且还能语言独立,我想这是每个程序员的梦想,SOAP就是不错的技术实现。但是不要期待SOAP能提供你自己写的很多底层代码一样高的效率。

写了一下Perl调用Soap服务的代码,如下为perl MVC框架Catalyst中的代码,放在Root.pm中,所有的页面都会经过此处认证了:

[Copy to clipboard] [ - ]
CODE:
sub auto: Private {

    my ($self, $c) = @_;
    unless ($c->session->{user_id}){
        if ($c->req->param('ticket')) {
                use SOAP::Lite;
                my $soap = SOAP::Lite
                ->uri('http://indigo.oa.com/services')
                ->on_action( sub { join '/', 'http://indigo.oa.com/services', $_[1] } )
                ->proxy('http://192.168.1.205/services/passportservice.asmx?WSDL');
                my @params  = ( SOAP::Data->name(encryptedTicket => $c->req->param('ticket')));
                my $method =SOAP::Data->name('DecryptTicket')->attr({xmlns => 'http://indigo.oa.com/services/'});;
                my $result=$soap->call($method => @params)->result;
                unless( $result->{LoginName}) {
                        $c->log->debug("Ticket Auth Error,Please Login Again!");
                        $c->response->redirect("http://passport.oa.com/modules/passport/signin.ashx?url=" . uri_escape('http://db.ied.com'));
                }
                else {
                        $c->log->debug("Ticket Auth OK, The LoginName is " . $result->{LoginName});
                        $c->session->{user_id} = $result->{LoginName};
                        return 1;
                }
        }
        else {
                #$c->log->debug(Dumper($c->session));
                #$c->log->debug($c->req->uri);
                $c->response->redirect("http://passport.oa.com/modules/passport/signin.ashx?url=" . uri_escape($c->req->uri));
        }
    }
    return 1;
}

你一定奇怪为什么不用SOAP::Lite的service函数,因为我用了,调用.net的web service,老是报错,没办法,就像上边制定uri和proxy来用了,uri对应.net 的 web service 描述 那边有个命名空间的东西。

上边的用法也是MSDN里边的用法。perl调用.net的web service是麻烦点。

收藏 也许有一天会用到
自己顶一下,希望更多人了解吧。我再Perl子论坛里边搜索soap还挺多人咨询过这个问题呢
收藏了。