Клиент веб-сервиса на Perl

Я клиент - я хочу вызывать методы веб-сервиса.

У меня есть адрес веб-службы (суффикс .svc), и у меня есть имя метода, возвращаемое значение и их аргумент.

Служба реализована с помощью WCF (конечная точка HTML). Я хочу вызвать эти методы с помощью SOAP::Lite. Что я должен написать для URI, прокси и как именно мне вызывать методы?


person user687459    schedule 07.04.2011    source источник


Ответы (1)


Ты устанавливаешь

  1. proxy до конечной точки и
  2. uri (или в самой последней версии ns) к пространству имен в определении метода.

Один из самых простых способов сделать это — просто использовать URI WSDL и создать с ним объект 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 => [ ... ]
            ...
        }
    }
};
person Axeman    schedule 07.04.2011
comment
будь ты проклят за то, что написал отличный ответ на ужасный вопрос! теперь не могу удалить :P - person Jeff Atwood; 08.04.2011