2012-03-14 17 views
10

Używam metody wykorzystującej klasę SoapClient na stronie php do wywołania usługi internetowej na stronie asp.net.Zadzwoń do serwisu WWW asp.net z PHP z wieloma parametrami

Oto kod php.

$client = new SoapClient("http://testurl/Test.asmx?WSDL"); 

$params = array('Param1' => 'Hello', 
       'Param2' => 'World!'); 

$result = $client->TestMethod($params)->TestMethodResult; 

echo $result; 

Problem polega na tym, Dostaję tylko pierwszy parametr (param1) „Hello” z powrotem i wydaje się, że istnieje problem z param2. Oto metoda asp.net.

[WebMethod] 
public string TestMethod(string Param1, string Param2) 
{ 
    return Param1 + " " + Param2; 
} 

Czego brakuje mi w odpowiedzi na Hello World!?

Odpowiedz

19

Spróbuj tak:

$client = new SoapClient("http://testurl/Test.asmx?WSDL"); 
$params->Param1 = 'Hello'; 
$params->Param2 = 'World!';  
$result = $client->TestMethod($params)->TestMethodResult; 
+0

... zadziałało! Dziękuję Ci! – Felasfaw

+0

Jedno szybkie pytanie. Powodem, dla którego mój kod nie zadziałał, jest b/c, który był przekazywany jako pojedynczy parametr tablicy typów? – Felasfaw

+0

@Felasfaw, yeap. –

1
***********index.php****************** 
<?php 
require_once("lib/nusoap.php"); 
$client = new SoapClient("http://localhost:1966/ListAndishmandan/WebServiseFinal.asmx?WSDL"); 

    $params = array('Param1' => 'Moslem', 
        'Param2' => 'Ganji!'); 

    $result = $client->TestMethod($params)->TestMethodResult; 

    print_r($result); 
    $params = array('Param1' => 'Moslem', 
        'Param2' => 'Ganji!'); 
echo "\n \r"; 
    $result2 = $client->ShowNameFamely($params)->ShowNameFamelyResult; 

    print_r($result2); 
?> 

    *******************WebServiseFinal.asmx?WSDL************************** 
    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.Services; 

    /// <summary> 
    /// Summary description for WebServiseFinal 
    /// </summary> 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    // 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 WebServiseFinal : System.Web.Services.WebService { 

     public WebServiseFinal() { 

      //Uncomment the following line if using designed components 
      //InitializeComponent(); 
     } 

     [WebMethod] 
     public string HelloWorld() { 
      return "Hello World"; 
     } 
     [WebMethod] 
     public string TestMethod(string Param1, string Param2) 
     { 
      return Param1 + " " + Param2; 
     } 

     [WebMethod] 
     public string ShowNameFamely(string Param1, string Param2) 
     { 
      return Param1 + " " + Param2; 
     } 

    } 
+0

$ result2 = $ client-> ShowNameFamely ($ params) -> ShowNameFamelyResult; –

1

byłem googlowania dla wielu parametrów powołania. Cały wątek nie zawierał następujących informacji. Podczas wywołania php .asmx serwis internetowy, przemijanie parametrów musi pasować do zmiennych wykorzystywanych w służbie internetowej:

public string XYZ(string p, string q) 

Wezwanie serwis internetowy musi być coś takiego:

$params = array("p" => $name1, "q" => $name2); 

p, q pary muszą być nazwane i wyjaśnione w wywołaniach php.

Powiązane problemy