Avatar billede pernille_bergman Nybegynder
10. september 2003 - 15:56 Der er 20 kommentarer og
1 løsning

Perl program til webservice

Luk annonce  Hej eksperter,

Jeg har en webservice, som jeg har lavet clienter til i forskellige sprog.
Webservicen virker fint både i testen i browseren og i mit C# program.
Jeg har nu lavet et client program i perl, som får fin kontakt til servicen, men sætter de overførte parametre til null når de kommer over i webservicen, hvilket giver forkerte resultater.

Jeg er helt ny i Perl, så det kan være jeg mangler noget der, men jeg har på fornemmelsen det ikke er det for, jeg har set at mange andre har samme problem på andre nyhedgrupper, men ingen af dem jeg har fundet har fået svar, så jeg håber I kan hjælpe.

Hvis det kunne være det, ser min client således ud:

use WebService::ServiceProxy;

my $wsdl = "http://kpmdev.newtech.dk/kpmwebservice/Service1.asmx?WSDL";
my $service = WebService::ServiceProxy->new($wsdl);

    print "Check Out Dmu:\n Enter DMU id:  ";
    $dmuid = <STDIN>;
    print " Enter User Id: ";
    $userid = <STDIN>;
    print $service->CheckOutDMU("$dmuid","$userid");
   
På forhånd tak

Pernille Bergman
Avatar billede pernille_bergman Nybegynder
10. september 2003 - 16:02 #1
Forresten, jeg har prøvet at hard code funktionen CheckOutDMU(2,1), men det giver samme fejl
Avatar billede mfalck Praktikant
10. september 2003 - 16:07 #2
kan du evt få den til at skrive lidt mere debug info ud ?
Avatar billede pernille_bergman Nybegynder
10. september 2003 - 16:17 #3
hmm, jeg er ikke helt sikker på hvad du mener
Avatar billede mfalck Praktikant
10. september 2003 - 16:31 #4
pakken ser ret ny ud .. jeg skal lige kigge lidt mere på den for at se ... kan man bruge din webservice udefra ?
Avatar billede mfalck Praktikant
10. september 2003 - 16:45 #5
my ($key, $value);

my $wsdl = "http://kpmdev.newtech.dk/kpmwebservice/Service1.asmx?WSDL";
my $service = WebService::ServiceProxy->new($wsdl);

foreach $key (keys %$service) {
    $value = $service{$key};
    print "$key = \"$value\"\n";
}

    print "Check Out Dmu:\n Enter DMU id:  ";
    $dmuid = <STDIN>;
    print " Enter User Id: ";
    $userid = <STDIN>;
    print $service->CheckOutDMU("$dmuid","$userid");
Avatar billede mfalck Praktikant
10. september 2003 - 16:54 #6
ellers prøv

use SOAP::Lite;
print SOAP::Lite
        -> uri('http://kpmdev.newtech.dk/kpmwebservice/Service1.asmx?WSDL')
        -> CheckOutDMU(2,1)
        -> result;
Avatar billede mfalck Praktikant
10. september 2003 - 22:38 #7
så vidt jeg kan se (i koden) så er WebService::ServiceProxy blot en wrapper om primært SOAP::Lite, så evt skal du blot benytte den.
Avatar billede pernille_bergman Nybegynder
11. september 2003 - 09:13 #8
Tusind tak for hjælpen. Jeg har prøvet dine to ovenstående metoder men der sker stadig noget forkert. Dit første forslag virker, men parametrene bliver staidg sat til null. Det andet giver meddelsen "Transport is not specified (using proxy() method or service description)"
Avatar billede pernille_bergman Nybegynder
11. september 2003 - 09:14 #9
Og nej desværre er webservicen ikke tilgængelig udefra..
Avatar billede mfalck Praktikant
11. september 2003 - 09:15 #10
ok - jeg havde selv prøvet følgende:

#!/usr/bin/perl
use SOAP::Lite;
print SOAP::Lite
        -> uri('http://www.soaplite.com/Temperatures')
        -> proxy('http://services.soaplite.com/temper.cgi')
        -> f2c(32)
        -> result;
Avatar billede mfalck Praktikant
11. september 2003 - 09:17 #11
så du skal have en proxy-parameter på :
ellers prøv

print SOAP::Lite
  -> service('http://kpmdev.newtech.dk/kpmwebservice/Service1.asmx?WSDL')
  -> CheckOutDMU(2,1);
Avatar billede mfalck Praktikant
11. september 2003 - 09:18 #12
husk at bruge
use SOAP::Lite;
Avatar billede pernille_bergman Nybegynder
11. september 2003 - 09:44 #13
Ok, der kommer ingen fejlmeddelser nu, men parametrene bliver stadig sat til null :o(
Avatar billede mfalck Praktikant
11. september 2003 - 10:33 #14
bom bom - der skal vist lidt debugging til :-)
Avatar billede pernille_bergman Nybegynder
11. september 2003 - 10:40 #15
forresten, så ved jeg ikke helt hvornår parametrene bliver sat til null, kan man på en eller anden måde se hvad parametrene er i proxy klassen?
Avatar billede mfalck Praktikant
11. september 2003 - 10:49 #16
http://cookbook.soaplite.com

der er en del eksempler; jeg er ikke så meget inde i SOAP at jeg kan sige hvad forskellen på en uri og en proxy er :-)
Avatar billede mfalck Praktikant
11. september 2003 - 10:50 #17
hvad sker der hvis du bruger

CheckOutDMU("2","1");
Avatar billede pernille_bergman Nybegynder
11. september 2003 - 11:01 #18
Der sker det samme, faktisk kan jeg underligt nok skrive CheckOutDMU; uden () eller parametre, og det giver samme resultat..
Avatar billede mfalck Praktikant
11. september 2003 - 11:06 #19
hmm .. er du sikker på at du har fat i serveren ? Har du prøvet at skrive noget ud når SOAP-serveren kaldes ?
Avatar billede pernille_bergman Nybegynder
11. september 2003 - 11:12 #20
ja, jeg har fat i serveren, og webservicen, den giver svar tilbage men bare de forkerte
Avatar billede pernille_bergman Nybegynder
11. september 2003 - 12:45 #21
Så er det løst!! :o)
Jeg fandt en kode der så således ud:
use SOAP::Lite;

my $soap = SOAP::Lite
    -> uri('http://kpmdev.newtech.dk')
    -> on_action( sub { join '/', 'http://kpmdev.newtech.dk', $_[1] } )
    -> proxy('http://kpmdev.newtech.dk/kpmwebservice/Service1.asmx');

print "Check Out Dmu:\n Enter DMU id:  ";
    $dmuid = <STDIN>;
    print " Enter User Id: ";
    $userid = <STDIN>;

my $method = SOAP::Data->name('CheckoutDMU')
            ->attr({xmlns => 'http://kpmdev.newtech.dk'});

    my @params = ( SOAP::Data->name(dmuautoid => $dmuid),
              SOAP::Data->name(userid => $userid) );

    print $soap->call($method => @params)->result; 

   
Og det virker!! Man skulle åbenbart give den navnene på de parametre den gav

Men tusind tak for hjælpen :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging