Jak oprogramować dostęp do bazy danych REGON?

0

Jak w temacie. Mam za pomocą wsutil.exe wygenerowane pliki "c" i "h", Na podstawie przykładu https://learn.microsoft.com/en-us/windows/win32/wsw/httpcalculatorclientexample otwieram z powodzeniem proxy, jednak próba wywołana operacji Zaloguj powoduje błąd: "0x803d0020: Adres URL punktu końcowego jest nieprawidłowy.". Wiem, że do sukcesu konieczne jest uzupełnienie wygenerowanej procedury o header:
"...
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
wsa:Tohttps://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To>
wsa:Actionhttp://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Zaloguj</wsa:Action>
..."
Niestety nie wiem jak to zrobić i tu prośba o pomoc :-). Wskazanie kierunku :-). Mój kod na teraz wyglada następująco:

class __declspec(dllexport) REGON
{
public:
	REGON(WCHAR* nKey, WCHAR* nNIP);

private:
	void release();
	HRESULT				hr = NOERROR;
	WS_ERROR*			error = NULL;
	WS_HEAP*			heap = NULL;
	WS_SERVICE_PROXY*	proxy = NULL;
	WCHAR**				ZalogujResult = NULL;
	void GetError(HRESULT errorCode, WS_ERROR* error);
};

REGON::REGON(WCHAR* nKey, WCHAR* nNIP)
{
    WS_ENDPOINT_ADDRESS address = {};
    static const WS_STRING url = WS_STRING_VALUE((WCHAR*)L"https://wyszukiwarkaregon.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc");
    address.url = url;

    if (FAILED(this->hr = WsCreateError(NULL, 0, &this->error)))
    {
        this->release();
        return;
    }
 
    if (FAILED(this->hr = WsCreateHeap(2048, 512, NULL, 0, &this->heap, this->error)))
    {
        this->release();
        return;
    }
   
    if (FAILED(this->hr = WsCreateServiceProxy(WS_CHANNEL_TYPE_REQUEST, WS_HTTP_CHANNEL_BINDING, NULL, NULL, 0, NULL, 0, &this->proxy, this->error)))

    {
        this->release();
        return;
    }

    if (FAILED(this->hr = WsOpenServiceProxy(this->proxy, &address, NULL, error)))
    {
        this->release();
        return;
    }
    this->hr = e3_Zaloguj(this->proxy, nKey, this->ZalogujResult, this->heap, NULL, 0, NULL, this->error);
}
0

SOAP w C ... dają za to order bohatera związku radzieckiego ?
Bo powinni. Pośmiertny

O ile kibicowałem SOAP, i na wdrożeniach Delphi / C# / Java byłem w miarę zadowolony, w gołym C bym sie nie podjął (nie ma prawdziwego C++ ???)

Uwaga na poziomie teoretycznym:
w SOAP sa jakby dwa poziomy, rzeczywiste kotłowanie kodu nazwijmy biznesowego (napisane w WSDL reguły, np kalkulator) i poziom koperty (envelope), jakby nośnika. Typową kopertą jest HTTP, ale nie jedyną.
Informacja jest teoretyczna, nigdy nie musiałem z tym krwawo walczyć (zawsze było dobrze), może czegoś takiego brakuje ?

0

No mam nadzieję, że jednak nie pośmiertnie :-D

1

Jak ostatnio używałem tej technologi w Delphi to wystarczyło zaimportować WSDL i kod był w 100% działający
Na tym Twoim WSDL też wygenerowały się klasy zgodne z dokumentacją , potem wysypuje na Zaloguj

Ja bym wrócił do dokumentacji , a jak po 10 minutach jak nic nie natchnie to odpoczynek i za godzinę powtórka :D
Poszukał bym moze obok dokumentacji jest przykład , ewentualnie kontakt techniczny i zapytał bym czy ta usługa działa.

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