Webservice c++ builder 10.3, hostowanie na IIS

0

Cześć,

Muszę zbudować webservice który będzie wymieniał dane pomiędzy dwoma systemami. Dla testów wymyśliłem sobie że stworzę dwa mini projekty VCL w C++ Builder (mam wersję 10.3) i będę wymieniał informację pomiędzy nimi. Wymiana informacji będzie dotyczyła muzyki. Czyli jak będę pytał o jakiegoś wykonawcę w systemie źródłowym (aplikacja źródłowa). Zapytanie w postaci XML-a będzie przesyłane do WS i stamtąd do systemu/aplikacji docelowej. System/aplikacja docelowa będzie mi zwracała dane o piosenkach danego wykonawcy.

Pierwszy problem na jaki natrafiłem to jak wyświetlić plik XML w komponentach memo i treeview.
Znalazłem w sieci taki kawałek kodu

FILE *stream;
  char FirstLine[512];
  
  OpenDialog1->Options.Clear();
  OpenDialog1->Options << ofAllowMultiSelect << ofFileMustExist;
  OpenDialog1->Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
  OpenDialog1->FilterIndex = 2; // start the dialog showing all files 
  if (OpenDialog1->Execute())
  {
    for (int I = 0; I < OpenDialog1->Files->Count; I ++)
    {
      stream = fopen(AnsiString(OpenDialog1->Files->Strings[I]).c_str(), "r");
      if (stream)
      {
        // read the first line from the file
        fgets(FirstLine, sizeof(FirstLine), stream);
        Memo1->Lines->Append(FirstLine);
        fclose(stream);
      }
    }
  }

Na początku chciałem plik wyświetlić w memo i coś tam sie wyświetla ale.
Po pierwsze plik nie jest AnsiString tylko UTF-8 a po drugie wyświetla mi się w memo tylko pierwszy wiersz (zresztą zgodnie z tym co jest napisane w kodzie).
Możecie pomóc bo skończyły mi się pomysły.

2
  1. C++ borlandowy z VCL na webie, to jest nisza w niszy. Szanse na znalezienie wsparcia praktycznie zerowe.
    Dialekt C++ jest już archaiczny, jak choćby te stringi. Fundamenty nadal mają w genach, że znak==bajt, co dawno nie jest prawdą.

Nowoczesne języki mają 100% unikod

Proponuję C# (już jednego programistę nawróciłem na coś nowszego i darmowego)

  1. O wyświetlanie XML już pytałeś w innym wątku -> należy dyskutować tam
0

OK no to jak możesz mnie pokierować co i jak to może i ja spróbuję :) jakieś wskazówki?

0

Spodziewałem się takiej rady :( zawsze łatwo mówić komuś kto już coś umie nauczy się na googlach. Taką radę można dać każdemu w każdej sytuacji.

0

OK to teraz może bardziej konkretne pytanie.
Przeszukałem wujka googla i zacząłem coś dłubać i na razie jestem na etapie.

  1. W VisualStudio stworzyłem prosty webservice (ASP.NET Web App i w nim Web Service (ASMX).
  2. W tym webservice-ie dodałem metodę Suma(int a, int b). I jak uruchamiam ten webservice w przeglądarce to wszytko fajnie się wyświetla. Mogę nawet podać dwa parametry i otrzymać odpowiedź.
  3. W C++ Builderze utworzyłem sobie nowy VCL Projekt i próbowałem się skomunikować z moim webservice-em za pomocą komponentów: RESTClient RESTRequest i RESTResponse.
  4. Ustawiłem w RESTClient -> BaseURL na adres webservice-u i RESTRequest->Execute. W odpowiedzi dostaję 200-tkę czyli OK
    Dorzuciłem dwa pola Edit i BUttona i nie potrafię odpytać webservice w taki sposób żeby w editach wpisać dwie liczby, klik w buttona i żeby np. w memo otrzymać zwrotkę z webservice-u.
    Jakieś pomysły?
0

Bardzo brakuje Ci teorii. i podawania szczegółów na forum.

Prawdopodobnie pierwsza jest typu SOAP / WSDL (po microsoftowemu chyba WCF). Ja osobiście ich nie przeklinam, ale na pewno są powoli odchodzące.
Nie jest to REST. Ma plusy, np wystawia metody, co zauważyłeś (a nie ma ich w REST)

Embecadery (przynajmniej płatne) mają narzędzia do wygenerowania przyjmującego API z linku WSDL, poszukaj na menu. Osobiście to robiłem na Delhi, łykało pięknie WSDL z .NET/C#.


Opcja przeciwna: ze Studia wystaw prawdziwą REST service. Tysiące źródeł w googlu. Ale w REST nie ma metod (przynajmniej wprost, tricków nie będziemy się na początku uczyć)

Klient REST akceptuje to 200, bo nie jest type-safe, pewnie zaakceptował by bloga cioci Basi z 200ką.

0

Żeby nie robić jakiegoś "suchego" projektu pomyślałem żeby zrobić coś praktycznego.
Ogólnie będzie chodziło o zapytanie dot. samochodu.
System źródłowy pyta system docelowy o auto po polach: marka, model,cenaOd, cenaDo, rocznikOd,rocznikDo.
Zapytanie i odpowiedź mają być w XML-u.
Pomiędzy oboma systemami jest WebService napisany w C# (WebApi).
Klient który pyta ma być napisany w C++ Builder.

Trochę poczytałem i jakieś poszczególne elementy tej układanki potrafię zrobić np. utworzyć XML-a z formularza w C++. Potrafię zrobić prosty WS w C# (WebApi). Sparsować XML-a zwrotnego z odpowiedzią ale jak zacząłem myśleć jak zrobić ten przykład z odpytaniem o auto to kompletna pustka. Nie wiem czy powinienem zacząć od budowania WS? Jakie metody muszę mieć oprócz klasy dot. obiektu.Jak przesłać requesta z C++ do WS w postaci XML itd.
Dacie jakieś wskazówki?

Myślałem żeby zacząć od WS ale nie wiem jaki projekt wybrać? Myślałem o Aplikacja internetowa platformy ASP.NET (.NET Framework) -> Interfejs API sieci Web bo takie projekty najczęściej "występują" w tutorialach? Ale nie wiem czy to dobry wybór?
Kolejną kwestią jest utworzenie metod.
Chciałbym utworzyć klasę cars która będzie zawierała odpowiednie pola i cztery metody.

  1. (request) odbierająca dane z systemu źródłowego
  2. (request) przesyłająca do systemu docelowego
  3. (response) odbierająca dane z systemu docelowego
  4. (response) przesyłająca do systemu źródłowego
    Nie wiem czy "idę w dobrym kierunku"?
0

XML jako SOAP czy XML na REST? Ciągle nie mam wrażenia, ze to odróżniasz
Myśl o "ręcznym" XML wydaje się patologiczna. Jest rok 2020 i na wszystko sa biblioteki. Fakt, embecader C++ jest mało kompatybilne ze standardowym C++

0

Oczywiście że nie wszytko jeszcze chwytam, chyba każdy raczkujący w danej tematyce tak ma.
To że mój WS chcę zbudować z pomocą rodzaju projektu "ASP.NET web api" i w C++ chcę skorzystać z komponentów RESTowych to determinuje to żę "cała komunikacja powinna być typu REST". Dużo o tym piszą w necie ale podają tylko ogólne info typu SOAP jest bardziej sformalizowany a REST nie itd.
Może jakieś zdanie wyjaśnienia od fachowca (@AnyKtokolwiek)?

1
forritarik napisał(a):

Może jakieś zdanie wyjaśnienia od fachowca (@AnyKtokolwiek)?

Proszę bardzo.
**www.google.com

**
Sorry, ale o REST jest WSZYSTKO w necie, i jest to łatwe.
Nie stać Cię na to, abym internet przepisywał.

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