无法使用WSDL :: Generator运行Perl Web服务

Wae*_*ael 16 perl soap wsdl

我已经尝试了两周在Perl(with WSDL::Generator)中创建一个Web服务,并用Perl编写的客户端调用它.

现在我尝试使用专门用于WSDL的库提供的示例:Soap::Lite 但是我得到一个不断出现的错误

404 file not found at c.PL at line 7.
Run Code Online (Sandbox Code Playgroud)

你能帮我解决一下吗?

这是我的代码:

WorldFunctions.pm (C:\ Perl\SOAP-Lite\WorldFunctions.pm):该类

package WorldFunctions;
    sub new { bless {}, shift; }
    sub Hello { my ($s, $name) = @_;
            return 'Hello, ' . $name . "\n";
    }
    sub GoodBye { my ($s, $name) = @_;
            return 'Goodbye, ' . $name . "\n";
    }
Run Code Online (Sandbox Code Playgroud)

a.pl (C:\ Perl\SOAP-Lite\a.pl):创建WorldFunctions.pm类的WSDL文件

#!/usr/bin/perl
use WSDL::Generator;
my $init = {
        'schema_namesp' => 'http://localhost/world/WorldFunctions.xsd',
        'services'      => 'WorldFunctions',
        'service_name'  => 'WorldFunctions',
        'target_namesp' => 'http://localhost/world',
        'documentation' => 'Simple Hello World SOAP Service.',
        'location'      => 'http://localhost/world'
};
my $w = WSDL::Generator->new($init);
WorldFunctions->Hello('Joe');
WorldFunctions->GoodBye('Joe');
print $w->get(WorldFunctions); # Returns the WSDL code for a specific class
open(TOTO,"<a.wsdl");
close(TOTO);
open(TOTO,">a.wsdl");
print TOTO $w->get(WorldFunctions);
close(TOTO);
Run Code Online (Sandbox Code Playgroud)

c.pl (C:\ Perl\SOAP-Lite\c.pl):perl客户端WSDL文件

#!/usr/bin/perl 
use DBI();
use CGI;
use SOAP::Lite;
my $service = SOAP::Lite-> service('file:a.wsdl');   
print "test retour : |".$service-> Hello('Joe')."|";
Run Code Online (Sandbox Code Playgroud)

知道我使用本地服务器(使用WAMP服务器)并将我复制到我的目录WorldFunctions.pm localhost/world.

这是WSDL文件:

<?xml version="1.0"?>
<definitions name="WorldFunctions" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="http://localhost/world" xmlns:tns="http://localhost/world" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsdl="http://localhost/world/WorldFunctions.xsd">
    <types>
        <xsd:schema targetNamespace="http://localhost/world/WorldFunctions.xsd">
            <xsd:element name="GoodByeRequest" type="xsd:string" />
            <xsd:element name="GoodByeResponse" type="xsd:string" />
            <xsd:element name="HelloRequest" type="xsd:string" />
            <xsd:element name="HelloResponse" type="xsd:string" />
        </xsd:schema>
    </types>
    <message name="GoodByeRequest">
        <part name="GoodByeRequestSoapMsg" element="xsdl:GoodByeRequest"/>
    </message>
    <message name="GoodByeResponse">
        <part name="GoodByeResponseSoapMsg" element="xsdl:GoodByeResponse"/>
    </message>
    <message name="HelloRequest">
        <part name="HelloRequestSoapMsg" element="xsdl:HelloRequest"/>
    </message>
    <message name="HelloResponse">
        <part name="HelloResponseSoapMsg" element="xsdl:HelloResponse"/>
    </message>
    <portType name="WorldFunctionsWorldFunctionsPortType">
        <operation name="GoodBye">
            <input message="tns:GoodByeRequest" />
            <output message="tns:GoodByeResponse" />
        </operation>
        <operation name="Hello">
            <input message="tns:HelloRequest" />
            <output message="tns:HelloResponse" />
        </operation>
    </portType>
    <binding name="WorldFunctionsWorldFunctionsBinding" type="tns:WorldFunctionsWorldFunctionsPortType">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
            <operation name="GoodBye">
                <soap:operation style="document" soapAction=""/>
                <input>
                    <soap:body use="literal"/>
                </input>
                <output>
                    <soap:body use="literal"/>
                </output>
            </operation>
            <operation name="Hello">
                <soap:operation style="document" soapAction=""/>
                <input>
                    <soap:body use="literal"/>
                </input>
                <output>
                    <soap:body use="literal"/>
                </output>
            </operation>
    </binding>
    <service name="WorldFunctions">
        <documentation>
            Simple Hello World SOAP Service.
        </documentation>
        <port name="WorldFunctionsWorldFunctionsPort" binding="tns:WorldFunctionsWorldFunctionsBinding">
            <soap:address location="http://localhost/world"/>
        </port>
    </service>
</definitions>
Run Code Online (Sandbox Code Playgroud)

aba*_*eld 3

您似乎没有映射http://localhost/world到可以处理该请求的 SOAP 处理程序,因此您会收到该 URL 的 404 错误。

您需要配置 apache,以便该 URL 上有一些内容。

http://metacpan.org/pod/SOAP::WSDL::Server::Mod_Perl2