Perl 中的 Web 服务客户端

发布于 2024-10-31 05:09:01 字数 163 浏览 5 评论 0原文

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

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

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

I am the client - I wish to call methods of a web service.

I have a web service address (.svc suffix) and I have the method's name, return value and their argument.

The service is implemented with WCF (HTML end point). I wish to call those methods by SOAP::Lite. What should I write for the URI, proxy and how exactly do I call the methods?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

木格 2024-11-07 05:09:01

您可以将

  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::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 => [ ... ]
            ...
        }
    }
};

You set

  1. the proxy to the endpoint and
  2. the uri (or in the most recent version ns) to the namespace in the method definition.

One of the easiest ways to do this is simply to use the WSDL URI and create a SOAP::Schema object with it, like so:

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

And dump those two objects.

You can look for

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

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

And use those values, if everything is there.

I had to dig through a lot of SOAP::Lite dumps in order to get my SOAP client architecture working. You should know how to debug and dump Perl objects if you want to shoot all your troubles.

I'll show you an anonymized dump of a service:

$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 => [ ... ]
            ...
        }
    }
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文