http://www.perlmonks.org?node_id=1104308

casey0999 has asked for the wisdom of the Perl Monks concerning the following question:

Good morning--

I'm a reasonably experienced Perl programmer, but new to accessing SOAP methods. Specifically, I'm trying to pull out the proper parameters from a customer-supplied WSDL file, and determine the arguments to supply to a SOAP::Lite call, as follows:

In my subroutine to execute a SOAP method, supplying the method name (StartTransaction) and arguments, I use something like: (see below for WSDL source)

my $func = shift @_;

$soap = SOAP::Lite
-> uri('urn:company-com:gateway:v1/ITokenServiceContract/')
-> proxy('http://xxxxx.test.hatchlab.fr/201303')
-> $func(@_);


------------------------------------------
The above executes, but produces an error in the SOAP-Lite debug log:
"IIS 7.5 Detailed Error - 405.0 - Method Not Allowed"

...probably because the uri and proxy fields above are not correct, therefore I'm probably not getting to the SOAP dispatcher. Am I interpreting the WSDL correctly to set URI and PROXY? (WSDL port and binding excerpt below)

THANKS!
Casey

ps: cross-posted without reply on PerlGuru.com
------------------------------------------- WSDL excerpts PORT: <wsdl:portType name="ITokenServiceContract"> <wsdl:operation name="StartTransaction"> <wsdl:input wsaw:Action="urn:company-com:gateway:v1/ITokenServiceContr +act/StartTransaction" message="tns:ITokenServiceContract_StartTransaction_InputMessage"/> <wsdl:output wsaw:Action="urn:company-com:gateway:v1/ITokenServiceCont +ract/StartTransactionResponse" message="tns:ITokenServiceContract_StartTransaction_OutputMessage"/> </wsdl:operation> </wsdl:portType> BINDING: <wsdl:binding name="BasicHttpBinding_ITokenServiceContract" type="tns: +ITokenServiceContract"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="StartTransaction"> <soap:operation soapAction="urn:company-com:gateway:v1/ITokenServiceCo +ntract/StartTransaction" style="document"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> SERVICE: <wsdl:service name="TokenService"> <wsdl:port name="BasicHttpBinding_ITokenServiceContract" binding="tns:BasicHttpBinding_ITokenServiceContract"> <soap:address location="http://xxxxx.test.hatchlab.fr/201303/services/ +TokenService.svc"/> </wsdl:port> </wsdl:service>

Replies are listed 'Best First'.
Re: SOAP Lite WSDL Question
by thewebsi (Scribe) on Oct 19, 2014 at 20:29 UTC

    SOAP uses HTTP with an XML payload. "405.0 - Method Not Allowed" usually indicates a URL + method combo that the web server doesn't like. You should be able to test this by going to said URL (proxy) yourself (your browser would use the GET method though, so in case the server treats GET and POST differently, you may want to use a command-line tool to test POST) and see if you have access. It doesn't look like this request gets past the HTTP access part, so the rest is probably not relevant yet.

Re: SOAP Lite WSDL Question
by Anonymous Monk on Oct 19, 2014 at 21:19 UTC
Re: SOAP Lite WSDL Question
by casey0999 (Initiate) on Oct 20, 2014 at 22:53 UTC
    Thanks to both of you for your input. I wonder if SOAP::Lite is having trouble deconstructing this particular WSDL... The soapUI utility program has no problem.. hmmm... I think I will try a different approach. Will report back.