views:

83

answers:

2

Hi,

I'm trying to call this WS from PHP:

namespace WsInteropTest
{
    /// <summary>
    /// Summary description for Service1
    /// </summary>
    [WebService(Namespace = "http://advantage-security.com/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class TestWs : System.Web.Services.WebService
    {
        [WebMethod]
        public string HelloWorld(int entero)
        {
            return "Hello World " + entero.ToString();
        }
    }
}

The code i use to call the WS is this:

<?php
        require_once('nusoap\nusoap.php');
  $client = new nusoap_client('http://localhost/testws/TestWS.asmx?WSDL');

  $params = array(
   'entero' => 100
  );

  $result = $client->call('HelloWorld', array($params), 
      'http://advantage-security.com/HelloWorld',
      'http://advantage-security.com/HelloWorld');
  print_r($result);
  ?>

and the result is this

Hello World 0

What do you think may be the problem?

According to what i've read there is no issues with simple types between .NET (which are converted to standard soap types) and PHP.

If it is of use, here it is the WSDL.

Thanks in advance

  <?xml version="1.0" encoding="utf-8" ?> 
- <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://advantage-security.com/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://advantage-security.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"&gt;
- <wsdl:types>
- <s:schema elementFormDefault="qualified" targetNamespace="http://advantage-security.com/"&gt;
- <s:element name="HelloWorld">
- <s:complexType>
- <s:sequence>
  <s:element minOccurs="1" maxOccurs="1" name="entero" type="s:int" /> 
  </s:sequence>
  </s:complexType>
  </s:element>
- <s:element name="HelloWorldResponse">
- <s:complexType>
- <s:sequence>
  <s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string" /> 
  </s:sequence>
  </s:complexType>
  </s:element>
  </s:schema>
  </wsdl:types>
- <wsdl:message name="HelloWorldSoapIn">
  <wsdl:part name="parameters" element="tns:HelloWorld" /> 
  </wsdl:message>
- <wsdl:message name="HelloWorldSoapOut">
  <wsdl:part name="parameters" element="tns:HelloWorldResponse" /> 
  </wsdl:message>
- <wsdl:portType name="TestWsSoap">
- <wsdl:operation name="HelloWorld">
  <wsdl:input message="tns:HelloWorldSoapIn" /> 
  <wsdl:output message="tns:HelloWorldSoapOut" /> 
  </wsdl:operation>
  </wsdl:portType>
- <wsdl:binding name="TestWsSoap" type="tns:TestWsSoap">
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> 
- <wsdl:operation name="HelloWorld">
  <soap:operation soapAction="http://advantage-security.com/HelloWorld" style="document" /> 
- <wsdl:input>
  <soap:body use="literal" /> 
  </wsdl:input>
- <wsdl:output>
  <soap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
- <wsdl:binding name="TestWsSoap12" type="tns:TestWsSoap">
  <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" /> 
- <wsdl:operation name="HelloWorld">
  <soap12:operation soapAction="http://advantage-security.com/HelloWorld" style="document" /> 
- <wsdl:input>
  <soap12:body use="literal" /> 
  </wsdl:input>
- <wsdl:output>
  <soap12:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
- <wsdl:service name="TestWs">
- <wsdl:port name="TestWsSoap" binding="tns:TestWsSoap">
  <soap:address location="http://localhost/testws/TestWS.asmx" /> 
  </wsdl:port>
- <wsdl:port name="TestWsSoap12" binding="tns:TestWsSoap12">
  <soap12:address location="http://localhost/testws/TestWS.asmx" /> 
  </wsdl:port>
  </wsdl:service>
  </wsdl:definitions>
A: 

Shouldn't it be (since $params is already an array)

//you're passing array($params)
$result = $client->call('HelloWorld', $params, 
    'http://advantage-security.com/HelloWorld',
    'http://advantage-security.com/HelloWorld');
DulabCMS
I initially thought the same. I did the modification, and still i get 0... any ideas?
Luj Reyes
A: 

I couldn't find out what was happening here, so i decided to use instead the Soap librery built into Php 5.2.

The solution was this:

$client = new SoapClient("http://localhost/testws/TestWS.asmx?WSDL");
        $params = array(
            'entero' => 77
        );
        $result = $client->HelloWorld($params);
        print_r($result->HelloWorldResult);
Luj Reyes