Wpis z mikrobloga

Mireczki, mam problem z połączeniem się z #soap w #php . Dostałem dostęp do wsdl'a i przykładowe dane do wywołania funkcji "Test" w #csharp . Chciałbym połączyć się z wsdlem przez PHP. O ile połączenie z wsdlem działa poprawnie (bez wpisywania nawet danych do logowania) i mogę wywoływać np. funkcje _getFunctions czy _getTypes to już samo wywołanie konkretnej funkcji "Test" powoduje błąd: Error Fetching http headers. Przykładowy mój kod w php tutaj. Oczywiście próbowałem wywołać bez żadnych parametrów (parametry ClientCredentials dodane na podstawie kodu z C#) - bez skutecznie. Za każdym razem błąd: Error Fetching http headers.
Co robię źle? Przypuszczam, że problem leży z autoryzacją użytkownika. Może w C# coś oznacza to "X509CertificateValidationMode"? Ale co, skoro i tak jest ustawiona flaga na None? Jak w takim razie pobrać poprawnie funkcję? Miał ktoś podobny problem?
Próbowałem już nawet pisać w #python , ale również jest podobny problem.

Wołam #programowanie #php #csharp #soap
  • 13
a wiesz co powinna zwrócić ta metoda? może być tak że NULL to poprawna zwrotka? dumpnij _getLastRequest() i getLastResponse() po tym wywołaniu z nullem i wrzuć tutaj.
Poza tym chyba możesz olać
_soapCall i zrobić po prostu $client -> Test();
@kao3991: Wiem, na pewno nie null :) Zresztą mam jeszcze inną metodę i zwraca to samo. Metoda _getLastRequest zwraca:

xml version="1.0" encoding="UTF-8"?
a
getLastRequestHeaders:
POST /costam.svc HTTP/1.1
Host: ip:port
Connection: close
User-Agent: PHP-SOAP/5.4.45-0+deb7u11
Content-Type: application/soap+xml; charset=utf-8; action="http://tempuri.org/IAplikacjeClient/Test"
Content-Length: 192
Authorization: Basic bWt0ZXDDDm1LVGVzCCCeJDI5Nw==

Metody
getLastResponse i _getLastResponseHeaders nie zwracają nic :)
@kao3991: Próbowałem, wykonuje się identycznie jak __soapCall. Próbowałem już nawet programem SOAP UI - tutaj też działa pobranie nazw funkcji itd, jednak wywołanie kończy się błędem "BadContextToken" (z tego co pamiętam to tak brzmiał, nie mam możliwości teraz sprawdzenia tego).
@loginek0: możesz jeszcze popatrzeć wiresharkiem czy fidlerem zobaczyć co tam się dokładnie dzieje.
masz włączony error_reporting? może jakiś notice czy coś chociaż coś podpowie...

Ale chyba moje możliwości się wyczerpały, musiałbym sam spróbować żeby coś dalej wymyślić.
@kao3991: Tylko, że wireshark mi nie pomoże, bo jeszcze nie udało mi się ani razu wywołać poprawnie tego wszystkiego. Co do error_reporting - tak tego też próbowałem, ale wiesz, błąd jest odrazu po stronie http headers, więc pewnie do tego błędu nie dochodzi...
Niestety soap jest dostępny tylko z określonego IP, wiec nic to nie da. Ale dzięki za pomoc!
@loginek0: co z tego że Ci się nie udało? może zobaczysz w wiresharku że odpowiedź na Twój request przychodzi np. z redirectem, którego klient nie rozumie, albo coś tego typu. zawsze będziesz miał więcej informacji.
Jeszcze jeden pomysł - weź sobie te headery i body requestu który generuje biblioteka, wklej np. w Postmana i wyślij identyczny request. Może coś ciekawego zobaczysz.
@loginek0: Jak jeszcze z tym walczysz to polecam żebyś zrobił kilka testowych zapytań przez soapui. Wtedy powinno się wszystko wyjaśnić jak się do tego dobierać i jakie odpowiedzi faktycznie przychodzą.