views:

549

answers:

3

I am writting a silverlight application in which I want to call the php webservice written using NuSOAP. here is the WSDL of webservice

      <?xml version="1.0" encoding="ISO-8859-1" ?> 
- <definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:currencywebservice" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="urn:currencywebservice">
- <types>
- <xsd:schema targetNamespace="urn:currencywebservice">
  <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" /> 
  <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" /> 
  </xsd:schema>
  </types>
  <message name="GetAllCurrenciesRequest" /> 
- <message name="GetAllCurrenciesResponse">
  <part name="return" type="xsd:string" /> 
  </message>
- <portType name="currencywebservicePortType">
- <operation name="GetAllCurrencies">
  <documentation>Get all currencies available</documentation> 
  <input message="tns:GetAllCurrenciesRequest" /> 
  <output message="tns:GetAllCurrenciesResponse" /> 
  </operation>
  </portType>
- <binding name="currencywebserviceBinding" type="tns:currencywebservicePortType">
  <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" /> 
- <operation name="GetAllCurrencies">
  <soap:operation soapAction="urn:currencywebservice#GetAllCurrencies" style="rpc" /> 
- <input>
  <soap:body use="literal" namespace="urn:currencywebservice" /> 
  </input>
- <output>
  <soap:body use="literal" namespace="urn:currencywebservice" /> 
  </output>
  </operation>
  </binding>
- <service name="currencywebservice">
- <port name="currencywebservicePort" binding="tns:currencywebserviceBinding">
  <soap:address location="http://localhost/extras/currency/currencyservice.php" /> 
  </port>
  </service>
  </definitions>

When I call the webservice it gives an exception

The content type text/html of response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly

The php side of service is

<?php
// Pull in the NuSOAP code
require_once('../../lib/tools/nusoap/nusoap.php');

$ns = "urn:currencywebservice"; 
// Create the server instance
$server = new soap_server();
// Initialize WSDL support
$server->configureWSDL('currencywebservice', $ns);
$server->xml_encoding = "utf-8";
$server->soap_defencoding = "utf-8";
$server->wsdl->schemaTargetNamespace = $ns;

$server->register('GetAllCurrencies',
array(),
array('return' => 'xsd:string'),
$ns,
$ns."#GetAllCurrencies",
'rpc',
'literal',
'Get all currencies available');

// Define the method as a PHP function
function GetAllCurrencies() {
        return "test return";
}
// Use the request to (try to) invoke the service
header('Content-Type: text/xml; charset=utf8');
$server->service($HTTP_RAW_POST_DATA);
?>

Please help me out what is this problem?

A: 

It looks like the Service Client (Silverlight?) is expecting the result of the Service call to be text/xml with a UTF-8 encoding, but your PHP is returning it as text/html. text/html is the default content type for PHP unless you specify a different content type through the header command.

So, you may want to try adding the following to the top of your PHP file/service:

header('Content-Type: text/xml');

Also may want to ensure that your text encoding is UTF-8.

Jordan S. Jones
Thanks for your help jones! I will give it a try if it works.
Ummar
Now I am getting this error "Unrecognized message version." any idea?
Ummar
Update your original question with any code updates you have made.
Jordan S. Jones
I have updated the code following two lines "header('Content-Type: text/xml; charset=utf8');" and "$server->xml_encoding = "utf-8";" see the origional question
Ummar
as a work arround I have used WebClient instance, and parsed the responce myself.
Ummar
A: 

Please use the native PHP SoapClient instead of nuSoap. It's a relic of the past.

cweiske
A: 

In the register method try putting the '$use' parameter as 'literal' instead of 'encoded'.

Rohit Raisinghani
let me check it if it works?
Ummar