![]() |
Allgemein Gültige Schnittstelle gesucht...
Habe lange gesucht und hoffe in diesem Forum richtig zu sein. Ich würde mich freuen wenn es möglichst viele qualifizierte Meinungen zurückgibt.
Hintergrund: (worum geht es) Seit Windows Vista (7) ist die Welt des programmierens nicht mehr so einfach wie es bei XP war. Durch strikte Sicherheitsbestimmungen kann nicht mehr jeder mit jedem kommunizieren (Messages), und das normale Programm unter User account ist extrem eingeschränkt, auch in Zugriff auf die Registry. Ich will gar nicht alle Beschränkungen aufzählen, die wohl jeder kennt. Vor diesen Hintergrund ist es aber immer mehr überlegenswert, die Logik zum Beispiel in einen Windows Service zu legen. Dieser hat aber in der "neuen" Umgebung keine Oberfläche mehr. Auch ein Remote Server wäre denkbar. Also muss noch eine Oberfläche her, damit Daten angezeigt oder Befehle erteilt werden können. Diese beiden EXE müssen also miteinander kommunizieren! Nun gibt es einige Schnittstellen Ansätze. Sockets oder Pipes wären eine Möglichkeit, auch Interfaces oder Web Services könnte eine Lösung sein. Aber was kommt den optimalen am nächsten? Um es nicht ganz so einfach aussehen zu lassen, ist es bei dem Ansatz ja ohne weiteres denkbar, den Windows Service als Windows 32 API Applikation zu erstellen und die Oberfläche als Java Webseite! Die Schnittstelle sollte also Sprachübergreifend sein (Was zum Beispiel Sockets und Web Services ja sind). Ich würde gerne eure Meinung hören, und sei sie noch so abgefahren. Ich denke das Thema wird in Zukunft noch mehr beschäftigen und vielleicht bildet sich ja auch ein Standard wie z.B. MIB. |
AW: Allgemein Gültige Schnittstelle gesucht...
Das Thema nennt sich IPC (Interprozesskommunikation, bzw. inter-process communication) und eigentlich gibt es dafür tausende Wege.
- Pipes - TCPIP über localhost - MMF (memory-mapped files) - Mailslots - Man kann von seinem Programm aus auch irgendwie geziehlt Messages freischalten, damit sie auch von Programmen mit weniger Rechten angesprochen werden können (soweit ich mich richtig erinnere) ... PS: Die Sicherheit ist eigentlich schon seit WinNT an vielen Stellen stärker eingeschränkt, aber seit Vista setzt Microsoft das endlich mal durch, indem es nicht mehr alle Programme sändig mit Adminrechten laufen läßt. |
AW: Allgemein Gültige Schnittstelle gesucht...
Ja, OK, aber bin ich denn der Erste, der nach einer allgemein gültigen Definition sucht? Macht denn jeder von z.B. den AntiVirus Leuten ihre Schnittstelle selbst? Oder hat vielleicht Microsoft (ev. mit Sicherheitslöchern) nicht so was in eine der vielen DLLs gepackt?
|
AW: Allgemein Gültige Schnittstelle gesucht...
Wieso sollte es einen Standard geben, wenn die Anwendungsfälle so unterschiedlich sind?
Wieso gibt es keine Standardkommunikation zwischen Menschen? Weil es so viele unterschiedliche Anwendungsfälle gibt: Nonverbal, Handzeichen, Reden, Schreiben, Fresse hauen. All das sind perfekte Kommunikationsformen für den jeweiligen Anlass... |
AW: Allgemein Gültige Schnittstelle gesucht...
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
AW: Allgemein Gültige Schnittstelle gesucht...
Zitat:
|
AW: Allgemein Gültige Schnittstelle gesucht...
Zitat:
Aber nix was großartig Probleme bei der SW-Entwicklung bereitet das man hier jetzt nicht mehr schreiben darf. |
AW: Allgemein Gültige Schnittstelle gesucht...
Zitat:
Was ist denn Dein konkreter(!) Einsatzzweck? Was muss Dein Code machen, was er aktuell nicht darf? |
AW: Allgemein Gültige Schnittstelle gesucht...
Ja, prima, so langsam kommt die Diskussion in Gang.
Aber Vorweg: Nicht das ihr mich falsch versteht. Ich bin ein absoluter Verfechter der Windows 7 (NT5) Sicherheitsmaßnahmen. Nun zum konkreten Beispiel: Unter XP entstanden einige Server, halt ganz normale EXE die Daten über Socket Verbindung (TCP/IP) an die Clients liefern. Da gibt es z.B. IO-Server (Datenlieferant von untergelagerten Systemen), Security-Server (Benutzerverwaltung mit Rechten) oder Language-Server (der zur ID und LCID den Text liefert). Es gibt noch eine Menge mehr, aber als Beispiel sollte es genügen. Diese Server laufen auf irgendeinen PC und beliefern die Anfragen von Clients auf anderen PCs. Nun sollen diese Server als Windows Dienste umgebaut werden, was auch einleuchtend ist, da diese sowieso schon Aufgaben von Diensten erfüllen. Jetzt kommen wir zum Pudels Kern... Alle diese Server haben eine Oberfläche (Form) zum Konfigurieren, analysieren und warten. Diese Oberfläche fällt beim Windows 7 Dienst weg. Es muss also die Form von der Logik getrennt werden, Form als EXE und Windows Dienst mit Logik, wobei die Oberfläche nicht zwangsläufig eine Form sein muss. Es ist auch eine Webseite denkbar. Aber Bedienoberfläche und Dienst müssen kommunizieren. Und da suche ich eine Lösung. Anzumerken sei vielleicht noch, dass der Dienst nur Daten zur Oberfläche liefert oder bekommt. Wie die Oberfläche aussieht, entscheidet der Designer der Oberfläche (vielleicht ein wenig so wie XAML und CodeBehind) |
AW: Allgemein Gültige Schnittstelle gesucht...
Named Pipes mit Rechtevergabe auf Benutzerebene über eine beiliegende Dummydatei wäre meine erste Wahl.
TCP/IP 2. Wahl INI-Dateien 3. Wahl |
AW: Allgemein Gültige Schnittstelle gesucht...
Wenn der Dienst eh läuft, und per TCP/IP Kommuniziert, warum sollte er dann nicht auch noch auf einem weiteren Port z.B. Intraweb hosten und die Web-Oberfläche selber anbieten?
Bitte das oben gesagte nicht falsch verstehen. Ich persönlich halte Intraweb für so ziemlich die absolut falscheste Technologie, mit der man Webanwendungen bauen kann, aber genau für den Anwendungsfall, in dem die Logik eigentlich schon genau in dieser Anwendung ist, ist es vermutlich die einfachste Methode, das wiederzuverwenden. Da die Anwendung ansonsten eh schon mittels TCP/IP Kommuniziert, könnte sie hier auch alternativ den 'Steuerungskanal' anbieten, den eine weitere Anwendung dann bedienen könnte. Letzlich gibt es einfach keine 'Allgemein gültige Schnittstelle', es ist zwangsläufig immer eine Einzelfallentscheidung über alle Sinnvollen technologien und welche sich dann am effizientesten einsetzen lässt. |
AW: Allgemein Gültige Schnittstelle gesucht...
Ich mach sowas meistens über Memory Mapped Files, darüber können sich dann Server und Client unterhalten.
|
AW: Allgemein Gültige Schnittstelle gesucht...
... ich kann da statt Intraweb auch die WebComponents von Habarisoft (der Autor Michael Justin ist auch hier im Forum unterwegs) empfehlen. Sehr einfach zu konfigurieren, interner Webserver, wenig Overhead, RESTFUL Anwendungen/Webservices möglich, günstig usw.
Damit lässt sich eine Wartungs-Console für den Service schnell aufbauen. Wenn nötig auch mit BootStrap oder JQuery für mobile Geräte. Wirf mal einen Blick drauf.... |
AW: Allgemein Gültige Schnittstelle gesucht...
TCP ist ganz nett gedacht, aber die Bedienung soll eigentlich nicht mit der Daten Komunikation verkuddelt werden.
Auch Memory maped Files ist ganz nett, aber nur lokal, geht nicht global und schon gar nicht übers Netz wegen fehlender Rechte (Client ist möglicherweise nur ein einfacher User). Wir werden uns wahrscheinlich für MIB und snmp entscheiden. Das bedeutet es werden eine Client DLL für jede Sprache (C++, Delphi, C#, JS) und eine Server DLL für jede Sprache entstehen die entsprechende Funktionen besitzen womit ich Daten einer Oberfäche anbieten kann und Events der Oberfläche mitteilen. Danke für eure Meinungen. |
AW: Allgemein Gültige Schnittstelle gesucht...
Zitat:
Das Datenprotokoll sollte vom Datentransport getrennt werden. Prinzipiell gibt es zwei Arten von Datentransport: * streambasiert (TCP/IP, Named Pipes,..) * messagebasiert (UDP/IP, Mailsots, Windows Messages, SNMP, Dateidialog,...) Bei einem Stream muss man selbst für die Trennung der einzelnen "Befehle" sorgen, während diese Aufgabe bei einem messagebasierten Datentransport schon erledigt ist. Andererseits kann man mit vielen einzelnen Messages wieder einen Stream bilden. Die beiden Transportarten können also ineinander umgewandelt werden. Unabhängig vom Datentransport ist das Protokoll auf Anwendungsebene. Man könnte z.B. das POP3-Protokoll statt über TCP/IP auch über Named Pipes oder auch über Diskettenlaufwerke (2 Rechner, jeder hat ein Diskettenlaufwerk und es gibt 1 Diskette. Der Benutzer muss die Diskette wechselseitig in Rechner A und B stecken) fahren. Die grösste Fehler von Indy ist dass Datentransport und Protokoll untrennbar miteinander verbunden sind. :wall: Wenn man diesen Fehler vermeidet, dann kann es einem egal sein ob die Daten per TCP/IP, Named Piped oder was auch immer übertragen werden. Das Protokoll könnte man z.B. auf XML, JSON oder Canonical S-Expressions aufbauen. Wenn es Allgemein sein soll, muss das Protokoll auf jeden Fall eine hierarchische Datendarstellung erlauben. Eine Liste möglicher Protokolle gibt es hier: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz