Delphi XE6 + Webservice TERYT

0

Witam,
Przyszło mi się zderzyć z tematem Webservice z usługi Rejestr TERYT (https://api.stat.gov.pl/Home/TerytApi).
Próbuję się połączyć z tą usługą w Delphi XE 6, niestety przy próbie połączenia otrzymuje komunikat:

Limit czasu operacji został przekroczony.

To co zrobiłem do tej pory to:

  1. Component -> ImportWDSL. (WSDL Source dałem: https://uslugaterytws1test.stat.gov.pl/wsdl/terytws1.wsdl oraz Automatic SOAP versioning). To wygenerowało mi plik PAS z potrzebnymi funkcjami.
  2. Wrzuciłem na formę komponenty THTTPRIO oraz THTTPReqResp i odpowiednio ustawiłem parametry na obu.
  THTTPRIO.Port := 'custom';  // tutaj tylko ta jedna opcja "custom" jest do wyboru
  THTTPRIO.Service := 'TerytWs1';  // tutaj również tylko ta opcja jest do wyboru.
  THTTPRIO.WSDLLocation := 'https://uslugaterytws1test.stat.gov.pl/wsdl/terytws1.wsdl'

 THTTPReqResp.UserName := 'TestPubliczny';  // dane pobrane z instrukcji
 THTTPReqResp.Password := '1234abcd';  // dane pobrane z instrukcji
  1. Wywołanie połączenia:
var ten:  ITerytWs1;
begin
  ten := (THTTPRIO as ITerytWs1);
  ShowMessage(BoolToStr(ten.CzyZalogowany)); 
end;

No i przy próbie sprawdzenia ten.CzyZalogowany mam komunikat Limit czasu został przekroczony.

Czy coś źle robię?

EDIT:
Gdy podczas importu WDSL zaznaczę opcje "Process only WSDL Binding extensions for the SOAP 1.2 Protocol" zauważyłem, że zmieniają się nieco funkcje w generowanym pliku PAS i muszę wtedy użyć połączenia w taki sposób

var
  zalog: CzyZalogowany;
  zalogRes: CzyZalogowanyResponse;
  ten: ITerytWs1;
begin
  zalog := CzyZalogowany.Create;

  ten := (htpr1 as ITerytWs1);
  zalogRes := ten.CzyZalogowany(zalog);

 zalog.Free;
end;

Niestety to też nie pomogło, ale tym razem otrzymuje komunikat: Unable to retrieve the URL endpoint for Service/Port 'TerytWs1'/'custom' from WSDL https://uslugaterytws1test.stat.gov.pl/wsdl/terytws1.wsdl

Czy macie może jakiś sposób aby się z tą usługą połączyć?

0

Podbijam temat. Też zacząłem się z tym męczyć i mam identyczny wynik. Próba wywołania CzyZalogowany trwa dość długo i zwracany komunikat jest taki jak w poście powyżej. Pracuje w Delphi Berlin
Nadmienię tylko, że zrobiłem test w C# visual studio i zadziałało bez najmniejszego problemu.
Na zdarzeniu HttprioBeforeExecute idzie taki envelope

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<CzyZalogowany xmlns="http://tempuri.org/"/>
</SOAP-ENV:Body></SOAP-ENV:Envelope>

Zastanawiam się czy tu nie powinny zostać dodane informacje o Loginie i haśle.

0

W załączniku moje "kombinowanie" z tym ustroistwem. Może ktoś wpadnie jak przypisać RIO.HTTPWebNode.OnBeforePost:=RIO.OnBeforePostX;
test_webservice1.7z

0

Proponuję ugryźć temat z innej strony. Mianowicie ręcznie tworzyć kopertę i wysyłać ją np IdHtpp metodą post.
U mnie zadziałało.

0

@Svenson: a mógłbyś podpowiedzieć jak ma wyglądać ta koperta? albo podzielić się działającym projektem. Z góry dziękuje.

0

Poniżej treść żądania:


FRequest.WriteString('<?xml version="1.0" encoding="UTF-8"?> ');
FRequest.WriteString('<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"> ');
FRequest.WriteString('    <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"> ');
FRequest.WriteString('        <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> ');
FRequest.WriteString('            <wsse:UsernameToken wsu:Id="UsernameToken-2021-30-11T00:16:02+00:00"> ');
FRequest.WriteString('                <wsse:Username>TestPubliczny</wsse:Username>');
FRequest.WriteString('                <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">1234abcd</wsse:Password>');
//FRequest.WriteString('                <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">NWE5MTJkOWEyZTMyMDhhYWM0YWY2YTVmMmNjM2I0NDQ=</wsse:Nonce>');
FRequest.WriteString('                <wsu:Created>2021-30-11T00:16:02+00:00</wsu:Created>');
FRequest.WriteString('            </wsse:UsernameToken>');
FRequest.WriteString('        </wsse:Security>');
FRequest.WriteString('        <wsa:Action>http://tempuri.org/ITerytWs1/PobierzKatalogTERC</wsa:Action>');
FRequest.WriteString('    </soapenv:Header>');
FRequest.WriteString('    <soapenv:Body><ns1:PobierzKatalogTERC>');
FRequest.WriteString(' <ns1:DataStanu>2021-12-01T11:50:59.955+01:00</ns1:DataStanu>');
FRequest.WriteString(' </ns1:PobierzKatalogTERC></soapenv:Body></soapenv:Envelope>');

1 użytkowników online, w tym zalogowanych: 0, gości: 1