2011-04-07 2 views
0

Je suis le client - Je souhaite appeler les méthodes d'un service Web.Client du service Web en Perl

J'ai une adresse de service Web (suffixe .svc) et j'ai le nom de la méthode, la valeur de retour et leur argument.

Le service est implémenté avec WCF (point de terminaison HTML). Je souhaite appeler ces méthodes par SOAP::Lite. Que dois-je écrire pour l'URI, le proxy et comment appeler exactement les méthodes?

Répondre

5

Vous définissez

  1. le proxy au point d'extrémité et
  2. le uri (ou version la plus récente ns) à l'espace de noms dans la définition de la méthode.

Une des façons les plus faciles à faire est simplement d'utiliser l'URI WSDL et créer un objet SOAP::Schema avec elle, comme ceci:

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

Et vider ces deux objets.

Vous pouvez chercher

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

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

Et utiliser ces valeurs, si tout est là.

J'ai dû parcourir un grand nombre de dumps SOAP :: Lite afin de faire fonctionner mon architecture client SOAP. Vous devriez savoir comment déboguer et vider les objets Perl si vous voulez tirer tous vos problèmes.

Je vais vous montrer une décharge anonymisées d'un 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 => [ ... ] 
      ... 
     } 
    } 
}; 
+3

bon sang pour écrire une grande réponse à une question terrible! maintenant je ne peux pas le supprimer: P –