Temat: SOAP Header c# - WebService napisany w php

Witam,

Mam następujący problem. Chciałbym w aplikacji WinForms (c#, VS 2010) użyć WebServisu napisanego w PHP. Mam plik wsdl, widzę metody jakie udostępnia WebSerwice. Dodałem sobie Web Reference, podałem adres pliku wsdl i wszystko jest dobrze, no może prawie. Problem jest taki, że do uwierzytelniania w tym WS trzeba podać klucz w nagłówku Soap. Nie login i hasło ale określony klucz (wartość alfanumeryczna). Aby użyć metod z WS trzeba podać ten klucz. I teraz jak przekazać ten klucz do nagłówka SOAP w przesyłanej wiadomości?
Wielkie DZIĘKI za jakieś sugestie!!

konto usunięte

Temat: SOAP Header c# - WebService napisany w php

`Piotr Sowa edytował(a) ten post dnia 03.06.12 o godzinie 20:54

Temat: SOAP Header c# - WebService napisany w php

Dzięki za wskazówkę.
Dodałem ten nagłówek i wartość o jaką chodzi jednak pojawił się inny problem. Po stronie php oczekiwane jest coś takiego: <env:Header><ns2:authenticate>wartosc_klucza</ns2:authenticate></env:Header> a ode mnie wychodzi tak:
<soap:Header><types:KeySoapHeader id="h_id1"><authenticate xsi:type="xsd:string">wartosc_klucza</authenticate></types:KeySoapHeader></soap:Header>.
Wartości klucza są takie same jednak u mnie tag <authenticate> został obudowany tagiem o nazwie klasy, która dziedziczy z SoapHeader tzn. KeySoapHeader i php tego nie obsługuje.
I teraz moje pytanie, jak to obejść aby wychodziło tak jak trzeba, lub ew. jak zmienić ten WebService po stronie php, choć rozmawiałem z jego twórcą i to też nie będzie proste.

konto usunięte

Temat: SOAP Header c# - WebService napisany w php

`Piotr Sowa edytował(a) ten post dnia 03.06.12 o godzinie 20:47

Temat: SOAP Header c# - WebService napisany w php

Twoje podpowiedzi są "na wagę złota" ale problem też w tym, że jestem jeszcze trochę "zielony" i
nie bardzo wiem gdzie dokładnie wpisać się z kodem. Poszukałem trochę o OnSerializingAttribute itd, wiem co mogę zrobić za ich pomocą ale nie wiem "gdzie". Czy mogę wykorzystać to co już mam (na podstawie wsdl) czy trzeba wszystko pisać od nowa?

Mam coś takiego:
W kodzie wygenerowanym na podstawie wsdl przed metodą, którą chcę użyć wstawiam atrybut;
[SoapHeader("myHeader", Direction= SoapHeaderDirection.In)]

w tej metodzie przed Invoke mam:
myHeader = new KeySoapHeader();
myHeader.authenticate = "klucz";

gdzie KeySoapHeader to klasa dziedzicząca z SoapHeader.

Nie bardzo wiem jak ominąć to aby w nagłówku nie było tagu o nazwie klasy tzn. <types:KeySoapHeader>
Z góry dziękuje.

Temat: SOAP Header c# - WebService napisany w php

Zrobiłem za pomocą SoapExtension, tam też są metody dzięki którym można wstrzelić się po/przed serializacją/deserializacja.
Jeszcze raz dziękuje za pomoc.

Następna dyskusja:

odpowiednik fopen() z PHP w...




Wyślij zaproszenie do