2010-05-07 121 views
0
调用WS

我试图调用从PHP这个WS:缺失参数从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(); 
     } 
    } 
} 

我用它来调用WS代码是这样的:

<?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); 
    ?> 

,结果是这样的

的Hello World 0

您认为可能是什么问题?

根据我读过的,.NET(它们被转换为标准的soap类型)和PHP之间的简单类型没有问题。

如果它是有用的,这里是WSDL。

在此先感谢

<?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/"> 
- <wsdl:types> 
- <s:schema elementFormDefault="qualified" targetNamespace="http://advantage-security.com/"> 
- <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> 

回答

0

我找不到发生了什么事在这里,所以我决定使用内置于Php 5.2的Soap librery。

的解决方案是这样的:

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

它不应该是(因为$ params为已经数组)

//you're passing array($params) 
$result = $client->call('HelloWorld', $params, 
    'http://advantage-security.com/HelloWorld', 
    'http://advantage-security.com/HelloWorld'); 
+0

我最初以为是相同的。我做了修改,仍然得到0 ...任何想法? – 2010-05-07 21:16:19