如何发送SOAP响应?

时间:2019-04-09 03:24:53

标签: perl soap

我们使用了现成的应用程序,该应用程序能够通过SOAP调用发送SMS消息,但是用户需要提供实际的SMS发送服务。

我编写了以下简单的Perl脚本(用于测试),该脚本可以工作(即成功接收到SMS消息),但是客户端始终抱怨SMS没有发送。我在想这是因为我没有发送SOAP响应。

我的问题是如何发送SOAP响应?

谢谢

Integer

EDIT1: 我已经根据您的回答修改了脚本,但是当我发出“返回”命令时,在/var/log/httpd/access.log中总是出现错误500。错误500只是: #!/usr/bin/perl use strict; use warnings; use SOAP::Transport::HTTP; use Data::Dumper; use lib '/tmp/'; SOAP::Transport::HTTP::CGI -> dispatch_to('Vendor::Telephony') -> handle(); package Vendor::Telephony; sub SMS { my $name = shift; my $data = shift; my $message = $data->{'SMSMessage'}; my $number = $data->{'SMSNumber'}; open(SMS, " | sendmail -r alerts\@example.com $number\@sms.provider.com 2> /dev/null"); print SMS $message; close(SMS); }

我使用SOAP :: WSDL的wsdl2perl创建了perl模块。脚本现在看起来像:


172.23.34.18 - - [14/Apr/2019:09:24:16 +0800] "POST /cgi-bin/soap.cgi 
HTTP/1.1" 500 1806 "-" "Mozilla/4.0 (compatible; MSIE 6.0; MS Web 
Services Client Protocol 4.0.30319.42000)"

2 个答案:

答案 0 :(得分:2)

在以下URL上查看SOAP :: Server文档中的“示例”部分。

https://metacpan.org/pod/SOAP::Server

请注意,处理程序中的最后一条语句返回SOAP :: Data,但示例中似乎存在一个小错误:该方法应为new(),而不是name()。

本质上,您需要将响应构造为SOAP :: Data对象,然后将其返回()。希望您已经知道响应的结构,因为我不能帮助您!

答案 1 :(得分:0)

我需要更多地了解图书馆,才能提供一个“好的”答案,但是,请注意:

#!/usr/bin/perl use SOAP::Transport::HTTP; 
   SOAP::Transport::HTTP::CGI   
    ->dispatch_to('C2FService')   
    ->handle; BEGIN {   package C2FService;   

use vars qw(@ISA);   
@ISA = qw(Exporter SOAP::Server::Parameters);  

use SOAP::Lite;   
sub c2f {
         my $self = shift;
         my $envelope = pop;
         my $temp = $envelope->dataof("//c2f/temperature");
         return SOAP::Data->name('convertedTemp' => (((9/5)*($temp->value)) + 32));   } }

看看return,它以SOAP开头,因此提供了(如果我没记错的话,是有效的信封。对于我来说,SOAP::Lite以来已经有一段时间了,但是我确实记住使用https://www.soapui.org/可以大大帮助测试过程。