AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Kommunikation zwischen Web-Browser und Delphi-Programm
Thema durchsuchen
Ansicht
Themen-Optionen

Kommunikation zwischen Web-Browser und Delphi-Programm

Ein Thema von Schwedenbitter · begonnen am 11. Nov 2009 · letzter Beitrag vom 13. Nov 2009
Antwort Antwort
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

Kommunikation zwischen Web-Browser und Delphi-Programm

  Alt 11. Nov 2009, 23:49
Hallo,

folgende Ausgangslage:
Wir haben hier mehrere mySQL-Datenbanken, die auf einem Server laufen. Die User-Interfaces laufen alle über php auf einem Web-Browser (z.B. Firefox). Jetzt ist es notwendig, bestimmte Operationen auf den Clients selbst zu machen (z.B. Scannen, Faxen, Drucken, Dateien auf einem Fileserver sortieren, Dateien zum Bearbeiten öffnen ...) Auf die Clients kann ich mittels php - jedenfalls nicht ohne Tricks und MS ActiveX - nicht zugreifen. Das ist auch nicht mein Ziel. Es gibt deshalb derzeit mehrere kleine Delphi-Programme, die über Semaphoren gestartet und gesteuert werden. Das sind kleine Textdateien in einem bestimmten freigegebenen Verzeichnis mit klar definiertem Inhal. Das funktioniert soweit ganz gut. Wären es alles Delphi-Programme, würde ich es mit SendMessage() machen; ist aber leider nicht... Ich habe aber Probleme im VPN. Bei vielen Benutzern gibt es viele Dateien, was wiederum das Durchsuchen der Steuerdateien extrem verlangsamt und wertvolle Bandbreite kostet.

meine Idee:
Ich lasse mir die Befehle mittels php über den Browser ausgeben. Z.B. würde ein ".../aktion/?#oeffne=Y:\Texte\2567\Schreiben%20an%20Delphi-Praxis.odt" in der URL meinem Programm den Befehl geben, die Datei zu öffnen.

meine Probleme:
Momentan lösche ich meine Steuerdatei einfach, wenn die Aktion ausgeführt wurde. Es gab also keine doppelten Aktionen. Solange die URL so lautet, würde ich dann unentwegt die Datei (mehrfacj) öffnen. Jetzt müsste ich aber z.B. die URL ändern können, ohne dass gleich das Fenster neu geladen wird. Das bekomme ich nicht hin.
Außerdem lese ich im Moment die URL mittels eines Timers so aus. Das gefällt mir aber nicht und ich bin gerade dran, es mit WWW_RegisterURLEcho zu versuchen.

meine Fragen:
Hat schon mal jemand eine lauffähige Lösung zu WWW_RegisterURLEcho gefunden? Falls ja, wo?
Gibt es (ggf. auch in andere Richtungen) Ideen, wie ich das Kommunikationsproblem lösen kann?

Wie gesagt: Das System steht und arbeitet. Ich möchte es nur ggf. schneller und effektiver haben.

Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Kommunikation zwischen Web-Browser und Delphi-Programm

  Alt 12. Nov 2009, 10:13
Schon mal an AJAX gedacht? Der Client würde dabei im Hintergrund (d.h. ohne erneutes GET oder POST) laufend neue Daten vom Webserver abfragen können und dann per JavaScript Aktionen ausführen können - z.B. neue URL aufrufen, sobald der Server diese dem Client übermittelt.

Asynchronous JavaScript and XML
http://de.wikipedia.org/wiki/Ajax_%28Programmierung%29
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#3

Re: Kommunikation zwischen Web-Browser und Delphi-Programm

  Alt 12. Nov 2009, 11:24
Es gibt auch die Möglichkeit sich ein eigenes Protokoll zu registrieren, Dann kannst du auf der Webseite Links setzen myapp://print?file=/some.pdf&option=42 Dieses Protokoll muss dem Client in der Registry bekannt gemacht werden. Bei klick auf einen solchen link würde dann dein Programm lokal gestartet und würde die URL als Parameter übergeben bekommen.

LG, Björn
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Kommunikation zwischen Web-Browser und Delphi-Programm

  Alt 12. Nov 2009, 12:08
Danke für die Antworten!

@mjustin
Mein Kollege, der für die serverseitige Programmierung zuständig ist (php, html, java), hat Teile der Software auch mit AJAX programmiert. Ich verstehe Deinen Hinweis nicht; auch nach Lektüre des Links. Aber ich werde ihn mal ansprechen. Ich verstehe es so, dass es hauptsächlich darum geht, Seiten ohne den Server unmittelbar anzusprechen und ohne sie komplett neu zu lesen, zu verändern.
Wie ich damit eine Kommunikation hinbekomme, erschließt sich mir nicht. Ich werde aber fragen.

Zitat von arbu man:
Es gibt auch die Möglichkeit sich ein eigenes Protokoll zu registrieren, Dann kannst du auf der Webseite Links setzen myapp://print?file=/some.pdf&option=42 Dieses Protokoll muss dem Client in der Registry bekannt gemacht werden. Bei klick auf einen solchen link würde dann dein Programm lokal gestartet und würde die URL als Parameter übergeben bekommen.
Hört sich an, als wäre das genau das, wonach ich suche!

Entschuldigt die blöde Frage: Welche Suchbegriffe muss ich verwenden, um da etwas (auch zu Delphi) zu finden?

Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#5

Re: Kommunikation zwischen Web-Browser und Delphi-Programm

  Alt 12. Nov 2009, 13:46
Den Source gabs mal im SwissDelphiCenter.

Aber noch ein Hinweis zum verwenden eines eigenes Protokolls: Ein Protokoll ist ein Sicherheits Risiko, ein Angreifer könnte einer Webseite soetwas plazieren bla und diesen link per JS aufrufen. Deshalb empfielt es sich bei der generierung der Links einen Token al la myone://something?token=4554655654654 an alle URLs dranzuhängen und diesen Token im Programm mit dem richtigen Server abzugleichen. Damit hat ein Angreifer kaum noch Chancen.

Hier die Version die ich verwendet habe:
Delphi-Quellcode:
  UOperatingSystem = class
  public
   // [url]http://www.swissdelphicenter.ch/torry/showcode.php?id=2272[/url]
   /**
    * @param Name Bezeichnung des Protokolls z.B. http, ftp oder myone
    * @param Describtion Beschreibung z.B. MyCompany Protokoll zur einfachen Anzeige von xyz aus dem Browser
    * @param ExecuteStr Anwendung die gestartet werden soll, wichtig ist hier das %1 am Ende damit die URL auch übergeben wird z.B. 'C:\myone.exe %1'
    */
    class procedure RegisterProtocol(const Name, Describtion, ExecuteStr: string);
    class procedure UnregisterProtocol(const Name: string);
  end;

...

{ UOperatingSystem }

class procedure UOperatingSystem.RegisterProtocol(const Name, Describtion,
  ExecuteStr: string);
var
  reg: TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CLASSES_ROOT;
    reg.OpenKey(Name, True);
    try
      reg.Writestring('', 'URL:' + Name +' (' + Describtion + ')');
      reg.WriteInteger('EditFlags', 2);
      reg.WriteString('Source Filter', '');
      reg.WriteString('URL Protocol', '');
      reg.OpenKey('shell', True);
      reg.OpenKey('open', True);
      reg.OpenKey('command', True);
      reg.Writestring('', ExecuteStr);
    finally
      reg.CloseKey;
    end;
  finally
    reg.Free;
  end;
end;

class procedure UOperatingSystem.UnregisterProtocol(const Name: string);
var
  reg: TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CLASSES_ROOT;
    reg.DeleteKey(Name);
  finally
    reg.Free;
  end;
end;
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Kommunikation zwischen Web-Browser und Delphi-Programm

  Alt 12. Nov 2009, 18:01
Danke für den Code! Der läuft super!

Ich habe aber 3 Fragen zum Token: (1) Wie erstelle ich einen Token, (2) wie synchronisiere ich ihn zwischen dem Server und dem Client und (3) kann ich in meinem konkreten Fall nicht darauf verzichten?

Mein Plan sieht im Moment so aus, dass ich als Parameter (quasi wie bisher) die Steuerdatei übergeben lasse. Evtl. reicht das ja zur Sicherheit. Außerdem formatiert mein Programm nicht die Festplatte und löscht grundsätzlich nichts. Letzteres macht der php-Code auf dem Server.
Die Frage mit dem Token würde mich aber trotzdem interessieren ...

Gruß & Dank, Alex
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#7

Re: Kommunikation zwischen Web-Browser und Delphi-Programm

  Alt 13. Nov 2009, 13:47
(1) Ein Zufallszahl sollte ausreichen
(2) Das Clientprogramm schickt einen http-Request an den Server, der Server antwortet ob der Token gültig ist oder nicht. Näturlich sollte der Token täglich (oder öfters) geändert werden. Im Falle eines ungültigen Tokens sollte dann eine Warnmeldung kommen.
(3) Wenn du darauf verzichtest hast du ein potenzielles Sicherheitsproblem, wie kritisch das ist kann ich nicht beurteilen. Natürlich benötigt man für die Ausnutzung internes Wissen (mindestens den Protokollnamen und einige Befehle). Wie sicher du deine Software gestaltest bleibt natürlich dir überlassen. Wenn du nur den Namen der Steuerdatei übergibst hast du natürlich dadurch die Sicherheit das nur vom Server erstellte befehle ausgeführt werden können (es sei den man kann sowas machen myone://execute?url=http://evil_url_that_load_something_bad)

Gruß Björn
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:40 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