Клиент на уеб услуга в Perl

Аз съм клиент - искам да извикам методи на уеб услуга.

Имам адрес на уеб услуга (.svc суфикс) и имам името на метода, върнатата стойност и техния аргумент.

Услугата е реализирана с WCF (HTML end point). Искам да извикам тези методи от SOAP::Lite. Какво трябва да напиша за URI, прокси и как точно да извикам методите?


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


Отговори (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::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