windows - Sådan integreres PHP kode med en WCF web service ved hjælp af Message Security

Indlæg af Hanne Mølgaard Plasc

Problem



God dag.


Jeg vil integrere med en WCF web service med Message Security fra PHP. Webtjenesten forventer et certifikat fra klienten (PHP-koden) og kræver ikke brugernavne eller adgangskoder. Det bruger også wsHttpBinding.
Jeg har en Windows x64-pc med IIS7, der kører på den, og jeg kan udføre php kode fra min browser.


Jeg har forsøgt at bruge SoapClient () i PHP med følgende kode:


<?php

ini\_set("soap.wsdl\_cache\_enabled", "0");

try
{
    $context = stream\_context\_create(["ssl" => ["local\_cert" => "./cert/TestClient.pem", "CN\_Name => CN=TestClient"]]);
    $options = ["soap\_version" => SOAP\_1\_2, "authentication" => SOAP\_AUTHENTICATION\_DIGEST, "context" => $context];
    $service = new SoapClient("http://vanzyld:49321/pointerws/?wsdl", $options);

    $service->GetVehicleList([3538]);
}
catch (SOAPFault $f) 
{
    error\_log('ERROR => '.$f);
}

?>


men,


Med SOAP\_1\_2 er det den fejl, der returneres fra opkaldet:


ERROR => SoapFault exception: [HTTP] Error Fetching http headers in C:inetpubphprootWebServiceGetVehicles.php:16
Stack trace:
#0 [internal function]: SoapClient->\_\_doRequest('<?xml version="...', 'http://vanzyld:...', 'http://pointers...', 2, 0)
#1 C:inetpubphprootWebServiceGetVehicles.php(16): SoapClient->\_\_call('GetVehicleList', Array)
#2 {main}


Og med SOAP\_1\_1 returneres denne.


ERROR => SoapFault exception: [HTTP] Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'. in C:inetpubphprootWebServiceGetVehicles.php:16
Stack trace:
#0 [internal function]: SoapClient->\_\_doRequest('<?xml version="...', 'http://vanzyld:...', 'http://pointers...', 1, 0)
#1 C:inetpubphprootWebServiceGetVehicles.php(16): SoapClient->\_\_call('GetVehicleList', Array)
#2 {main}


Efter meget forskning ser det ud til, at SoapClient ikke håndterer opkald til en WCF web service, der implementerer Message Security, så godt.
Et af forslagene var (herfra: Sådan kommunikerer du mellem PHP og WCF sikkert), at jeg installerer en tredjepartspakke fra WSO2, men det synes også ikke at være den bedste vej, der skal følges, da WSO2 ikke støtter dette længere. Jeg kunne heller ikke få WSF-installationen til at fungere på min pc, selv efter at du har fulgt alle trin på, hvordan du installerer wsf på min pc. (https://wso2.com/project/wsf/php/2.0.0/docs/install\_guide.html - Jeg fulgte trin 2.1 og 2.4) WSF sektionen kom aldrig op på min phpinfo side som aktiveret. PHP-fejlen, der blev returneret efter installationen af ​​WSF, var simpelthen, at koden ikke kunne finde WSClient () klassen. [6]


Er der nogen anden PHP klasse eller bibliotek eller tredjepart objekt, der kan bruges til at integrere PHP kode med en WCF web service, der bruger Message Security? Eller er der en måde for SoapClient () at faktisk arbejde med denne form for WCF service? Eller er PHP bare begrænset med hensyn til dets evne til integration med en Message Security WCF web service?


Tak skal du have.
Daleen

Bedste reference


I begge tilfælde ser du ud til at have fejl med dine overskrifter. Du bliver fortalt dette udtrykkeligt med SOAP\_1\_2-fejlen, SOAP\_1\_1-fejlen klager over, at den forkerte indholdstype er angivet, hvilket betyder, at indholdsoverskriften faktisk ikke blev sendt korrekt.


Prøv at bruge klassen SoapHeader for at rette din kode:


http://php.net/manual/en/class.soapheader.php[7]