Wie eine C # Web-Service durch PHP aufrufen?
-
07-07-2019 - |
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 array
s 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?
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.
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" />