Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Kommunikation mit Windows WCF Dienst (https://www.delphipraxis.net/188718-kommunikation-mit-windows-wcf-dienst.html)

jus 30. Mär 2016 14:58

Kommunikation mit Windows WCF Dienst
 
Hallo,

ich soll einen Request bei einem fremden Windows WCF Dienst machen und habe folgenden Javas Beispielcode, das von einer HTML Datei aufgerufen wird:
Code:
    $.ajax({
        url: url,
        type: "POST",
        contentType: "application/json;encoding=utf-8",
        crossDomain: true,
        data: reqdata,
        success: success,
        error: error
    });
Es werden JSON Daten zum WCF Dienst hingeschickt und es werden JSON Daten zurückgeliefert.

Muß ehrlich zugeben, dass ich bisher keine Erfahrung mit Windows WCF Dienst gehabt habe. Ich habe folgenden Code versucht, leider funktionert es nicht ganz.
Delphi-Quellcode:
HttpPostURL('http://localhost:1201/testsample/POS/json/sign', Params, st);
Wie kann man sowas in Delphi 2007 nachbauen?

Lg,
jus

jus 1. Apr 2016 15:06

AW: Kommunikation mit Windows WCF Dienst
 
Hallo,

wollt mich noch kurz melden, für die Leute die wie ich noch nie mit Microsoft WCF gearbeitet haben, habe es nun hingekriegt. Ist einfacher als ich es gedacht habe. Anscheinend habe ich das Tutorial "Introduction to WCF Programming in Delphi" bei Embarcadero nicht gründlich genug durchgelesen. :duck: Ich dachte nämlich, dass es eine Anleitung rein für Delphi .NET war. Dabei wurde im unteren Teil des Artikels Delphi 2007 explizit erwähnt. Die ganze Arbeit macht einfach der "WSDL Importer" siehe obiger Embaracadero Artikel. Hat zumindest bei mir auf Anhieb funktioniert. Somit braucht man sich nicht mehr um die Kommunikation kümmern.

Interessant wäre es trotzdem, wie man selber über ein http POST die JSON-Daten wie AJAX (siehe erster Beitrag) zum Server raufschickt. Vielleicht weiß da jemand Rat. :)

Lg,
jus

mjustin 1. Apr 2016 18:42

AW: Kommunikation mit Windows WCF Dienst
 
Zitat:

Zitat von jus (Beitrag 1334461)
Interessant wäre es trotzdem, wie man selber über ein http POST die JSON-Daten wie AJAX (siehe erster Beitrag) zum Server raufschickt. Vielleicht weiß da jemand Rat. :)

Zum Beispiel mit der Indy TIdHTTP Komponente und diesem Code.

https://mikejustin.wordpress.com/201...-6-https-post/

jus 1. Apr 2016 20:00

AW: Kommunikation mit Windows WCF Dienst
 
hallo Mike,

vielen Dank für die Antwort. Ich habs gleich ausprobiert, funktioniert leider nicht. Es kommt die Fehlermeldung "HTTP/1.1 400 Bad Request".

lg,
jus

vagtler 1. Apr 2016 21:17

AW: Kommunikation mit Windows WCF Dienst
 
Was sagt Fiddler dazu?

jus 2. Apr 2016 00:47

AW: Kommunikation mit Windows WCF Dienst
 
ok, nun geht es. :cheers: War wieder Mal mein Fehler. :oops: Hatte im JSON einen Abschreibfehler gehabt.
@mjustin Danke nochmals für den Code! :-D

Habe den folgenden Code geringfügig an Delphi 2007 angepaßt, damit es compiliert.

Delphi-Quellcode:
program JSONPostExample;

{$APPTYPE CONSOLE}

uses
  IdHTTP, IdGlobal, SysUtils, Classes;

var
  HTTP: TIdHTTP;
  RequestBody: TStream;
  ResponseBody: string;
  s: String;
begin
  HTTP := TIdHTTP.Create;
  try
    try
      s := '{"ftID":"TESTID","cbD":"1"}';
      writeln(s);
      RequestBody := TStringStream.Create(s);
      try
        HTTP.Request.Accept := 'application/json';
        HTTP.Request.ContentType := 'application/json'; //<------ mußte bei mir zwingend drinstehen, damit es funktioniert!!!
        HTTP.Request.ContentEncoding:= 'utf-8';

        ResponseBody := HTTP.Post('http://localhost:1201/testsample/POS/json/sign', RequestBody);

        WriteLn(ResponseBody);
        WriteLn(HTTP.ResponseText);
      finally
        RequestBody.Free;
      end;
    except
      on E: EIdHTTPProtocolException do
      begin
        WriteLn(E.Message);
        WriteLn(E.ErrorMessage);
      end;
      on E: Exception do
      begin
        WriteLn(E.Message);
      end;
    end;
  finally
    HTTP.Free;
  end;
  ReadLn;
  ReportMemoryLeaksOnShutdown := True;
end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz