Frage

Ich habe einen Web-Service mit ASP.NET geschrieben (in C #) und ich bin versucht, ein Beispiel PHP-Client NuSOAP zu schreiben. Wo ich gestolpert bin oben auf sind Beispiele dafür, wie dies zu tun; einige zeigen soapval verwendet wird (und ich verstehe nicht ganz die Parameter - zum Beispiel false als string Typen vorbei, etc.), während andere nur gerade arrays verwenden. Nehmen wir an, die WSDL für meine Web-Service, wie durch http://localhost:3333/Service.asmx?wsdl sieht etwas berichtet, wie:

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>

Mein erster PHP-Versuch wie folgt aussieht:

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

Jetzt abgesehen von dem Param-Typ einen komplexen Typ zu sein, die ich ziemlich sicher, dass mein einfacher $array Versuch bin mit nicht automatisch arbeiten, ich bin in meinem Setzen von Breakpoints Web-Service und zu sehen, die Methode, die ich als WebMethod markiert haben (ohne Umbenennung es, sein buchstäblich DoSomething) und zu sehen, die Argumente sind alle Standardwerte (der int ist 0, die string ist null usw.).

Was sollte meine PHP-Syntax aussehen, und was muß ich tun, richtig Param Typen passieren?

War es hilfreich?

Lösung

Sie haben, um die Dinge in Tonnen von verschachtelten Arrays wickeln.

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

Andere Tipps

Sortieren von nicht verwandten, aber da PHP5 Sie native Unterstützung für SOAP.

$client = new SoapClient("some.wsdl");
$client->DoSomething($params);

Das könnte ein wenig bequemer sein.

http://se.php.net/soap

Hier wird die Probe mit nativen SOAP-Unterstützung:

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

Wo ... / IntegrationService / php 'in Soapclient Beschreibung ist Endpunkt in WCF:

<endpoint
            address="php"
            binding="basicHttpBinding"
            contract="Integration.Service.IDrupalIntegrationService" />
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top