Webservice c++ builder 10.3, hostowanie na IIS

Webservice c++ builder 10.3, hostowanie na IIS
forritarik
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:39
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

Kopiuj
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.

AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:27 dni
  • Postów:3561
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

Bo C to najlepszy język, każdy uczeń ci to powie
forritarik
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:39
0

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

forritarik
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:39
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?
AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:27 dni
  • Postów:3561
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ą.


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 4x, ostatnio: AnyKtokolwiek
forritarik
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:39
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"?
edytowany 1x, ostatnio: forritarik
AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:27 dni
  • Postów:3561
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++


Bo C to najlepszy język, każdy uczeń ci to powie
forritarik
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:39
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)?

AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:27 dni
  • Postów:3561
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ł.


Bo C to najlepszy język, każdy uczeń ci to powie
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)