【问题标题】:Client of web service in PerlPerl 中的 Web 服务客户端
【发布时间】:2026-02-11 16:55:01
【问题描述】:

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

我有一个 Web 服务地址(.svc 后缀),我有方法的名称、返回值及其参数。

该服务是使用 WCF(HTML 端点)实现的。我希望通过SOAP::Lite 调用这些方法。我应该为 URI、代理写什么以及我应该如何调用这些方法?

【问题讨论】:

    标签: web-services perl client-side perl-module soaplite


    【解决方案1】:

    你设置

    1. proxy 到端点和
    2. uri(或最新版本中的ns)添加到方法定义中的命名空间。

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

    my $schema = SOAP::Schema->new( schema_url => $destination_URL )->parse();
    my $services = $schema->services();
    

    然后转储这两个对象。

    你可以找

    my $method_def = $service->{ $method_name };
    
    my $uri   = $method_def->{namespace};
    my $proxy = $method_def->{endpoint}->value();
    

    并使用这些值,如果一切都在那里。

    为了让我的 SOAP 客户端架构正常工作,我不得不挖掘大量 SOAP::Lite 转储。如果您想解决所有问题,您应该知道如何调试和转储 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 => [ ... ]
                ...
            }
        }
    };
    

    【讨论】:

    • 该死的你为一个可怕的问题写了一个很好的答案!现在我不能删除它:P
    最近更新 更多