2012-03-14 3 views
10

Sto utilizzando un metodo che utilizza la classe SoapClient in una pagina php per chiamare un servizio Web in un sito asp.net.Chiamare il servizio Web asp.net da PHP con più parametri

Ecco il codice php.

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

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

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

echo $result; 

Il problema è, io sto ottenendo soltanto il primo parametro (Param1) "Ciao" avanti e sembra che ci sia un problema con Param2. Ecco il metodo asp.net.

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

Che cosa mi manca per ottenere Hello World! nella risposta?

risposta

19

Prova in questo modo:

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

... ha funzionato! Grazie! – Felasfaw

+0

Una domanda veloce. Il motivo per cui il mio codice non funzionava è b/c che veniva passato come un singolo parametro di tipo array? – 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

ero googling per il multi-parametro chiamata. Tutto il thread non ha detto quanto segue. Quando php chiamata .asmx servizio web, il passaggio di parametri devono corrispondere le variabili utilizzate nel servizio web di:

public string XYZ(string p, string q) 

La chiamata di servizio web deve essere qualcosa di simile:

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

p, q coppie devono essere nominate e chiarite in php calling.