SOAP: mit / ohne WSDL-Datei

Mamphil

Erfahrenes Mitglied
Hallo,

ich will ohne WSDL-Datei auskommen, die entsprechenden Parameter also manuell als zweiten Parameter übergeben.

Funktionierendes Beispiel:
PHP:
<?php
$client = new SoapClient('http://www50.brinkster.com/vbfacileinpt/np.asmx?wsdl', array('trace' => 1));

$result = $client->__getFunctions();
print_r($result);

$result = $client->__getTypes();
print_r($result);

$result = $client->GetPrimeNumbers( array('max' => 100) );
print_r($result);

echo 'R: ' . $client->__getLastRequest() . "\n";
echo 'H: ' . $client->__getLastRequestHeaders() . "\n\n";
?>

Ergebnis der letzten Zeile:
Code:
POST /vbfacileinpt/np.asmx HTTP/1.1
Host: www50.brinkster.com
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.2.0-8+etch10
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://microsoft.com/webservices/GetPrimeNumbers"
Content-Length: 280

Wie muss der Aufruf aussehen, wenn ich ohne die WSDL-Datei auskommen will? Folgendes habe ich funktioniert:
PHP:
<?php
$client = new SoapClient(null, 
	array(
		'location' => 'http://www50.brinkster.com/vbfacileinpt/np.asmx',
		'uri' => 'http://microsoft.com/webservices/',
		'trace' => 1
	)
);
// ...
?>
Dies führt zu folgendem Fehler:
Code:
Fatal error: Uncaught SoapFault exception: [soap:Client] System.Web.Services.Protocols.SoapException: Server did not recognize the value of HTTP Header SOAPAction: http://microsoft.com/webservices/#GetPrimeNumbers.
   at System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest()
   at System.Web.Services.Protocols.SoapServerProtocol.Initialize()
   at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing) in /opt/www/.../soap_test.php:19
Stack trace:
#0 [internal function]: SoapClient->__call('GetPrimeNumbers', Array)
#1 /opt/www/.../soap_test.php(19): SoapClient->GetPrimeNumbers(Array)
#2 {main}
  thrown in /opt/www/.../soap_test.php on line 19
Wo kommt die Raute (erste Code-Zeile, bitte nach rechts scrollen) her und wie kriege ich sie weg?

Oder etwas allgemeiner gefragt: Wie muss der Aufruf richtig aussehen?

Danke für eure Hilfe!
Mamphil
 
Zurück