2010-05-07 124 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