Mit der PHP-Aufruf eines WCF web service mit mehreren Bindungen
Ich habe einen WCF-service, welches sowohl Grundlegende HTTP-und WS-HTTP-clients, die beide über HTTPS mit Benutzername & Passwort-Authentifizierung. Erreicht wird dies mit zwei Bindungen auf der gleichen service.
So, der service ist bei https://foo.com/Service.svc, die Grundlegenden HTTP (SOAP 1.1) Endpunkt https://foo.com/Service.svc/Unp11, und der WS-HTTP (SOAP 1.2) Endpunkt https://foo.com/Service.svc/Unp .
Client versucht, Zugriff auf diese web-service via PHP 5, mit seiner eingebauten SOAP-Unterstützung und Probleme bei der Verbindung zum Dienst. Er hält immer ein HTTP 400 (Bad Request) - Antwort, die dazu neigt zu geschehen, wenn die SOAP-Nachricht ist schlecht gebildet, oder eine SOAP 1.1-Nachricht eine SOAP-1.2-Endpunkt (oder Umgekehrt).
Ich nur weiß, Grundkenntnisse in PHP, so dass ich Probleme habe, ihm zu helfen. Ich weiß, Sie können einen client erstellen, indem Sie tun,
$client = new SoapClient('https://foo.com/Service.svc?wsdl');
aber wie geben Sie die binding - /Endpunkt? Gibt es irgendwelche bekannten Probleme der Verwirklichung all dies mit PHP?
UPDATE
Ok, so kann ich mit PHP eine Verbindung zu den WCF-service-ok (mit Angabe der SOAP-version in der SoapClient
Konstruktor), und ruft $client->__getFunctions()
gibt eine richtige Liste von allen web-service-Operationen.
Wenn ich versuche zu nennen, einen mit $client->__soapCall
, die Seite sitzt nur da laden für eine ganze Weile, und schließlich wird die Fehlermeldung "Fehler beim Abrufen der http-Header". Was genau soll dies bedeuten und wie behebe ich es? (Konsum der Dienstleistung aus .Net-client funktioniert einwandfrei.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lief einfach in dieses heute, das erstellen einer WCF mit mehreren Bindungen für eine PHP-Aufrufer. Einstellung der Standort wird damit für beide der WSDL-version des PHP-SoapClient und die Angabe einer Bindung zu verwenden.
WCF config ist (1-service mit 2 Bindungen wsHttp und basicHttp), ziemlich straight-forward.
PHP-code:
Haben wir einen SOAP-service, der verschiedene Bindungen. In C#, wenn Sie einen Dienst hinzufügen Referenz auf ein wsdl-Sie bekommen eine Klasse erstellt, für jeden eines, aber in PHP scheint es, dass Sie können nicht festlegen, welche die Bindung, die Sie verwenden möchten - dies verursacht mir Probleme, wenn die Bindungen haben widersprüchliche Art/Methode Namen. Es scheint zu funktionieren generell OK aus, aber ich weiß wirklich nicht, wie es ist der Umgang mit intern.
Die anderen häufigste problem, das ich habe ist, dass ich immer zum einpacken der Parameter in Lasten von arrays oder Strukturen - manchmal hat man einen Bad Request zurück, wenn der server erwartet einen parameter, und Sie haben nicht ganz festgelegt es richtig. (siehe Schwierigkeiten haben, meinen Kopf um SOAP in PHP)
Nicht sicher, ob dies ist sehr hilfreich, einfach einige Gedanken. Es gibt auch einige Drittanbieter-Soap-client-Implementierungen in PHP geschrieben werden könnte, lohnt ein Blick auf, aber Sie werden sehr viel langsamer.