Ich habe einen WCF-Webdienst, der sowohl HTTP- als auch WS-HTTP-Clients ermöglicht, sowohl über HTTPS mit Benutzername als auch über HTTPS. Passwort-Authentifizierung. Dies wird mit zwei Bindungen auf dem gleichen Dienst erreicht.
Der Dienst ist also Ссылка , der grundlegende HTTP (SOAP 1.1) -Endpunkt ist < em> Ссылка und der WS-HTTP (SOAP 1.2) -Endpunkt ist Ссылка .
Ein Client versucht über PHP 5 mithilfe der integrierten SOAP-Unterstützung auf diesen Webdienst zuzugreifen und hat Probleme beim Herstellen einer Verbindung mit dem Dienst. Er erhält immer eine HTTP 400-Antwort (Bad Request), die bei schlecht formatierter SOAP-Nachricht auftritt oder wenn eine SOAP 1.1-Nachricht an einen SOAP 1.2-Endpunkt gesendet wird (oder umgekehrt).
Ich kenne nur grundlegendes PHP, also habe ich Schwierigkeiten, ihm zu helfen. Ich weiß, dass Sie einen Client erstellen können, indem Sie
ausführen %Vor%aber wie spezifizieren Sie die Bindung / Endpunkt? Gibt es bekannte Probleme, die all dies mit PHP erreichen?
AKTUALISIEREN
Ok, also kann ich PHP verwenden, um eine Verbindung zum WCF-Service herzustellen (Angabe der SOAP-Version im SoapClient
-Konstruktor), und Aufruf von $client->__getFunctions()
gibt eine korrekte Liste aller Web-Service-Operationen zurück.
Wenn ich versuche, einen mit $client->__soapCall
aufzurufen, wird die Seite nur für eine Weile geladen und gibt schließlich den Fehler " Fehler beim Abrufen von http-Headern " zurück. Was genau soll das heißen und wie repariere ich es? (Der Dienst von .Net-Client zu konsumieren funktioniert einwandfrei.)
Das ist heute schon geschehen, indem wir einen WCF mit mehreren Bindings für einen PHP-Aufrufer erstellt haben. Das Festlegen des Standorts scheint sowohl die WSDL-Version des PHP-SoapClients als auch die Angabe einer zu verwendenden Bindung zu ermöglichen.
WCF config ist (1 Dienst mit 2 Bindungen wsHttp und basicHttp), ziemlich einfach.
PHP-Code:
%Vor%Wir haben einen SOAP-Service, der mehrere Bindungen hat. In C #, wenn Sie eine Service-Referenz zu einer WSDL hinzufügen, erhalten Sie eine Klasse für jede einzelne erstellt, aber in PHP scheint es, Sie können nicht angeben, welche Bindung Sie verwenden möchten - das hat mir Probleme verursacht, wenn die Bindungen widersprüchlichen Typ / Methode haben Namen. Es scheint im Allgemeinen gut zu funktionieren, aber ich weiß nicht wirklich, wie es intern damit umgeht.
Das andere häufige Problem, das ich hatte, ist, dass ich die Parameter immer in eine Menge von Arrays oder Strukturen einbinden muss - manchmal erhalten Sie eine schlechte Anfrage, wenn der Server einen Parameter erwartet und Sie ihn nicht richtig eingestellt haben . (Siehe Probleme haben, meinen Kopf um SOAP in PHP )
Nicht sicher, das ist viel Hilfe, nur ein paar Gedanken. Es gibt auch einige Soap-Client-Implementierungen von Drittanbietern, die in PHP geschrieben wurden und die es sich lohnen könnten, betrachtet zu werden, aber sie werden sehr viel langsamer sein.