Perl中Web服务的客户端

use*_*459 0 perl web-services perl-module client-side soaplite

我是客户端 - 我希望调用Web服务的方法.

我有一个Web服务地址(.svc后缀),我有方法的名称,返回值和他们的参数.

该服务使用WCF(HTML端点)实现.我想把这些方法称为SOAP::Lite.我应该为URI,代理以及如何调用方法编写什么?

Axe*_*man 5

你设定

  1. proxy到端点并
  2. uri(或最新版本ns),以在方法定义的命名空间.

最简单的方法之一就是使用WSDL URI并SOAP::Schema使用它创建一个对象,如下所示:

my $schema = SOAP::Schema->new( schema_url => $destination_URL )->parse();
my $services = $schema->services();
Run Code Online (Sandbox Code Playgroud)

并转储这两个对象.

你可以寻找

my $method_def = $service->{ $method_name };

my $uri   = $method_def->{namespace};
my $proxy = $method_def->{endpoint}->value();
Run Code Online (Sandbox Code Playgroud)

如果一切都在那里,请使用这些值.

我不得不深入挖掘大量的SOAP :: Lite转储,以使我的SOAP客户端架构正常工作.如果你想拍摄所有麻烦,你应该知道如何调试和转储Perl对象.

我将向您展示一个匿名的服务转储:

$services = {
    ServiceName => {
        MethodName => {
            endpoint => bless( {
                _attr => {},
                _name => 'location',
                _signature => [],
                _value => [
                    # v-- This value you pass to SOAP::Lite->proxy
                    'http://some.domain.com/WebServices/SOAPEndpoint.asmx' 
                ]
            }, 'SOAP::Custom::XML::Data' 
            ),
            # v-- This value you pass to uri/default_ns/ns
            namespace => 'http://some.domain.com/',
            parameters => [ ... ]
            ...
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

  • 该死的你为一个可怕的问题写了一个很好的答案!现在我无法删除它:P (3认同)