URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6785
[ Назад ]

Исходное сообщение
"Perl SOAP::Lite"

Отправлено help , 25-Сен-07 14:19 
кто работал с SOAP::Lite, please отзавитесь

Содержание

Сообщения в этом обсуждении
"Perl SOAP::Lite"
Отправлено NuINu , 25-Сен-07 15:45 
>кто работал с SOAP::Lite, please отзавитесь

:))) и что это тебе даст? читай Хакер, не помню за какой месяц, там пара статей была.


"Perl SOAP::Lite"
Отправлено help , 25-Сен-07 15:56 
>>кто работал с SOAP::Lite, please отзавитесь
>
>:))) и что это тебе даст? читай Хакер, не помню за какой
>месяц, там пара статей была.

нужна помощь в решенние задачи которая использует это


"Perl SOAP::Lite"
Отправлено NuINu , 25-Сен-07 17:26 
>>>кто работал с SOAP::Lite, please отзавитесь
>>
>>:))) и что это тебе даст? читай Хакер, не помню за какой
>>месяц, там пара статей была.
>
> нужна помощь в решенние задачи которая использует это

ты по русски то можешь написать где и в чем проблема. а уж там посмотрим можно помочь или нет. :)


"Perl SOAP::Lite"
Отправлено help , 25-Сен-07 17:45 
получяю xml сообщение:
use SOAP::Lite;
my $soap = SOAP::Lite
     -> uri('http://sms.com/daemon')
     -> proxy('http://sms.com/cgi-bin/SMS/2.cgi');
    
$xml = SOAP::Data->name('sms' => \SOAP::Data->value(
       SOAP::Data->name('id' => '3334'),
       SOAP::Data->name('language' => 'en'),
       SOAP::Data->name('text' => 'Jhon')));
                                            
$r=$soap->sms($xml);
$rez = $r -> result;
print "Результат:$rez \n";
exit;

теперь в 2.cgi:
#!/usr/bin/perl -w
use SOAP::Transport::HTTP;
SOAP::Transport::HTTP::CGI
    -> dispatch_to('daimon')
    -> handle;
package daimon;
sub sms {
$p=@_; # object/class reference
my $param2 = SOAP::Data->name('text'=>$p);
return $param2;
}
должен возращят $param='Jhon' , а он возвращяет $param='2'


"Perl SOAP::Lite"
Отправлено NuINu , 26-Сен-07 17:32 
>получяю xml сообщение:
>должен возращят $param='Jhon' , а он возвращяет $param='2'

ну ну.
вот мой пример: сервер serv2.pl:
#!/usr/bin/perl -w


use SOAP::Transport::HTTP;
use Data::Dumper;
use strict;

SOAP::Transport::HTTP::CGI
    -> dispatch_to('daemon')
    -> handle;

package daemon;

sub sms {
    my $p=shift; # object/class reference
    my $envelope = pop;

    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
    my $logsdir  = "/srv/www_test/log/"; #убедись что для пользователя апач эта директория доступна для записи
    $year += 1900;
    $mon++;
    my $month_logsfile = $logsdir.sprintf("%.4d%.2d.log",$year,$mon);


    open(LOG, '>>', $month_logsfile) or die "Can't open log file $month_logsfile\n";
    print LOG sprintf("%.4d.%.2d.%.2d %.2d:%.2d:%.2d",$year, $mon, $mday, $hour,$min,$sec), " Get query:\n";

    print LOG Data::Dumper::Dumper($envelope);
    $envelope->{'text'} = $envelope->{'text'} . " +server ret";

    close(LOG);
    return $envelope;
}

1;

клиент: client2.pl
#!/usr/bin/perl -w

#use SOAP::Lite;
use SOAP::Lite +trace => [transport=>\&log];
use Data::Dumper;

use strict;

my $soap = SOAP::Lite
     -> uri('http://test.localhost/daemon')
     -> proxy('http://test.localhost/cgi-bin/serv2.pl');

my $xml = SOAP::Data->name('sms' => \SOAP::Data->value(
       SOAP::Data->name('id' => '3334'),
       SOAP::Data->name('language' => 'en'),
       SOAP::Data->name('text' => 'Jhon')));

my $r=$soap->sms($xml);
my $rez = $r->result;
#print "Результат:$rez \n";
#print Dumper($r)."\n";
print Dumper($rez)."\n";
print "Результат:".$rez->{'text'}." \n";

exit(0);

sub log {
    open LOG, ">>client.log";
    print LOG $_[0]->as_string."\n";
    close LOG;
}

1;

ну и то что видит клиент(печатает):
$ ./client2.pl
$VAR1 = {
          'language' => 'en',
          'text' => 'Jhon +server ret',
          'id' => '3334'
        };

Результат:Jhon +server ret

ну и протоколы собственно можно в логе посмотреть.



"Perl SOAP::Lite"
Отправлено NN_was , 04-Дек-07 15:47 
>$p=@_; # object/class reference
>должен возращят $param='Jhon' , а он возвращяет $param='2'

потому что в строке $p=@_; # object/class reference
в $p заносится количество элементов в массиве @_, т.е. число 2, а после оно возвращается клиету.
все просто :)).