Cómo invocar a C# servicio web a través de PHP?

He escrito un servicio web mediante el ASP.NET (en C#) y estoy tratando de escribir un ejemplo de PHP cliente utilizando NuSOAP. Donde estoy errado, son ejemplos de cómo hacer esto; algunos muestran soapval que se usa (y no entiendo muy bien los parámetros – por ejemplo pasar false como string tipos, etc.), mientras que otros sólo están utilizando recta arrays. Digamos que el WSDL para mi servicio web como se informó por http://localhost:3333/Service.asmx?wsdl se ve algo como:

POST /Service.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/webservices/DoSomething"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <DoSomething xmlns="http://tempuri.org/webservices">
      <anId>int</anId>
      <action>string</action>
      <parameters>
        <Param>
          <Value>string</Value>
          <Name>string</Name>
        </Param>
        <Param>
          <Value>string</Value>
          <Name>string</Name>
        </Param>
      </parameters>
    </DoSomething>
  </soap:Body>
</soap:Envelope>

Mi primera PHP intento parece:

<?php
require_once('lib/nusoap.php');
$client = new nusoap_client('http://localhost:3333/Service.asmx?wsdl');

$params = array(
    'anId' => 3, //new soapval('anId', 'int', 3),
    'action' => 'OMNOMNOMNOM',
    'parameters' => array(
        'firstName' => 'Scott',
        'lastName' => 'Smith'
    )
);
$result = $client->call('DoSomething', $params, 'http://tempuri.org/webservices/DoSomething', 'http://tempuri.org/webservices/DoSomething');
print_r($result);
?>

Ahora aparte de el Param tipo es un tipo complejo que estoy bastante seguro de que mi simple $array intento no automágicamente trabajar, estoy breakpointing en mi servicio web y ver el método que he marcado como WebMethod (sin cambiarle el nombre, su literalmente DoSomething) y viendo los argumentos son los valores por defecto (el int es 0, el string es null, etc.).

¿Qué le debería decir a mi sintaxis de PHP y lo que tengo que hacer para pasar el Param escriba correctamente?

InformationsquelleAutor cfeduke | 2008-11-10

3 Kommentare

  1. 6

    Tienes que envolver las cosas en toneladas de matrices anidadas.

    <?php
    require_once('lib/nusoap.php');
    $client = new nusoap_client('http://localhost:3333/Service.asmx?wsdl');
    
    $params = array(
          'anId' => 3,
          'action' => 'OMNOMNOMNOM',
          'parameters' => array(
                  'Param' => array(
                      array('Name' => 'firstName', 'Value' => 'Scott'),
                      array('Name' => 'lastName', 'Value' => 'Smith')
                           )
          )
    );
    $result = $client->call('DoSomething', array($params), 
                    'http://tempuri.org/webservices/DoSomething', 
                    'http://tempuri.org/webservices/DoSomething');
    print_r($result);
    ?>
    • Gracias, me he tomado una aversión a PHP después de esta experiencia.
    • De verdad? Que la culpa de PHP para una 3ra parte de la biblioteca? Que como tomar una aversión por un helado después de comer mal caramelo.
  2. 3

    Tipo de relación, pero desde PHP5 tiene soporte nativo para el JABÓN.

    $cliente = new SoapClient("algunos.wsdl"); 
    $cliente->DoSomething($params); 
    

    Que podría ser un poco más cómodo.

    http://se.php.net/soap

  3. 1

    Aquí la muestra de forma nativa con JABÓN de apoyo:

        //Create a new soap client based on the service's metadata (WSDL)
        $client = new SoapClient("http://some.wsdl",
            array('location' => 'http://127.0.0.100:80/IntegrationService/php'));
    
        $params = array();
        $params['lead']['Firstname']    = $user->firstname;
        $params['lead']['Lastname']     = $user->lastname;
        $params['lead']['Product']      = $product;
        $params['lead']['JobTitle']     = $user->job_title;
        $params['lead']['Email']        = $user->mail;
        $params['lead']['Phone']        = $user->phone;
        $params['lead']['CompanyName']  = $user->company_name;
        $params['lead']['City']         = $user->city;
        $params['lead']['Industry']     = $user->industry;
    
        $client->SubmitLead($params);

    Donde ‘…/IntegrationService/php’ en SoapClient descripción es extremo en WCF:

    <endpoint
                address="php"
                binding="basicHttpBinding"
                contract="Integration.Service.IDrupalIntegrationService" />

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea