Uncaught SoapFault exception: [VersionMismatch]

0

I'm testing a simple Web Service that sends and receives a string , but the server ( Apache 2 ) returns the following error message:

  

Fatal error: Uncaught SoapFault exception: [VersionMismatch] Wrong Version in /var/www/html/client.php:7 Stack trace: # 0 /var/www/html/client.php (7): SoapClient-> ; __ call ('helloName', Array) # 1 {main} thrown in /var/www/html/client.php on line 7

Below are the scripts:

Server application with PHP

<?php  

function helloName($name)
{

    return 'Hello ' . $name;

}

$WSDL = 'ws.asmx';
$server = new SoapServer($WSDL);

$server->addFunction('helloName');

if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    $server->handle();

} else 
{

    foreach ($server->getFunctions() as $funcs) {

        print $funcs . ' <br> ';

    }

}


?>

WSDL

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
 xmlns:tns="http://localhost/"   
 xmlns:wsdl="http://www.w3.org/ns/wsdl"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="webservices"
 targetNamespace="http://localhost/">

<wsdl:types>

    <xsd:schemas targetNamespace="http://localhost/">

        <xsd:element name="parametroin">

            <xsd:simpleType>

                <xsd:element name="name" type="xsd:string"/>

            </xsd:simpleType>

        </xsd:element>

        <xsd:element name="parametroout">

            <xsd:simpleType>

                <xsd:element name="nameResponse" type="xsd:string"/>

            </xsd:simpleType>

        </xsd:element>

    </xsd:schemas>

</wsdl:types>

<wsdl:message name="getHelloName">

    <wsdl:part name="name" element="parametroin" type="xsd:string"/>

</wsdl:message>

<wsdl:message name="getHelloNameResponse">

    <wsdl:part name="name" element="parametroout" type="xsd:string"/>

</wsdl:message>

<wsdl:portType name="helloNamePortType">

    <wsdl:operation name="helloName">

        <wsdl:input message="getHelloName"/>

        <wsdl:output message="getHelloNameResponse"/>

    </wsdl:operation>

</wsdl:portType>

<wsdl:binding name="helloNameBinding" type="tns:helloNamePortType">

    <wsdl:operation name="helloName">

        <wsdl:input message="getHelloName">

            <soap:body parts="name" use="literal"/>

        </wsdl:input>

        <wsdl:output message="getHelloNameResponse">

            <soap:body parts="name" use="literal"/>

        </wsdl:output>

    </wsdl:operation>

</wsdl:binding>

<wsdl:service name="ws">

    <wsdl:port name="getHelloport" binding="tns:helloNameBinding">

        <soap:address location="http://localhost/ws.asmx"/>

    </wsdl:port>

</wsdl:service>

SOAP protocol captured by Wireshark

<?xml version="1.0" encodind="utf-8"?>
<SOAP-Env:envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope"> 
     <SOAP-ENV:Body>
          <body>
             nome
          </body>
      </SOAP-ENV:Body>
  <SOAP-ENV:envelope>

Script that attempts to connect to the server.

 <?php

   $wsdl = 'ws.asmx';
   $options = array('version' => 1, 'encoding' => 'utf-8', 'SoapVersion' => SOAP_1_2);
   $client = new SoapClient($wsdl, $options);
   print_r($client->__getFunctions());
   $result = $client->__call('helloName', array('nome'));

   print $result;


?>
    
asked by anonymous 26.02.2016 / 20:01

1 answer

0

This error is related to the version of the SOAP protocol used.

In your script the property in $ options should be 'soap_version' and not 'SoapVersion'. If it still does not work you can try SOAP_1_1 instead of SOAP_1_2.

    
29.02.2016 / 19:48