Re: Windows Anwendungmit einer Web mySQL als Backend?
- From: Sim <Sim@xxxxxxxxxxxxxxxxxxxxxxxxx>
- Date: Fri, 15 Dec 2006 08:23:01 -0800
Erste Frage hier wäre was genau machst Du in Deiner Anwendung
Meine Frage war eher allgemeiner Natur. Konkret könnte man aber zum Beispiel
folgendes realisieren:
Man schreibt eine Spiel-Anwendung a la SIMS o.ä. Also etwas was keine 3D
Daten und hohe Geschwindigkeit des Rechners braucht sondern ein Strategisches
Spiel, das einfach viel Daten austauschen muss.
Man kann sich eine 'Stadt' vorstellen, die von mehreren Spielern aufgebaut
und verwaltet wird. Usw. usw. usw.
Wenn man so etwas Hobbymässig realisieren will, dann wird es in der Regel
Webbasierend programmiert (meistens PHP). Der Nachteil ist
Benutzerfreundlichekeit, Geschwindigkeit (Seite muss aufgebaut werden), das
ganze Aussehen, Programmpflege und vor allem Entwicklungszeit, die extrem
lang wäre im Vergleich mit Möglichkeiten einer .NET Programmierung.
Nun wenn ich also das alles von Web auf Client verschieben will, dann muss
ich die Kommunikation zwischen Clients ermöglichen und da fangen die Probleme
erst an (Ports, benötigte eigene Servertools usw.).
Ich dachte mir daher die ganze Infrastruktur der meisten Provideranbieter zu
nützen indem ich eine Art Schnittstelle zwischen .NET (Client und PHP/mySQL
(Server) realisiere. Der Anwender startet also seine Windows Anwendung, die
Anwendung checkt Internetverfügung und baut die Verbindung zur mySQL
Datenbank über eine PHP Seite (direkt geht es wegen Ports, die gesperrt sein
könnten, nicht), die mySQL Datenbank gibt die aktuelle Informationen über
eine PHP Seite an Client wieder zurück. Entsprechend werden dann die Aktionen
und Objekte im Client dargestellt. So können alle Clients, die mit Internet
verbunden sind unter einander über mySQL komunizieren ohne Einschränkung,
weil ales über 8080 gehen würde. Natürlich eignet sich diese Methode nicht
für Applikationen, die einen schnellen Informationsaustausch benötigen (etwa
3D Spielen o.ä.).
Hmmm das wär so ne kleine Idee, natürlich kann man mit dieser Technik noch
vieles mehr machen.
Mich interessierte nur, ob jemand damit Erfahrungen hat oder ob es sonst
andere Lösungsansätze gibt (zugegeben diese Idee bildet sicher nicht den
ursprünglichen Sinn und Zweck des Erfinders ab :).
Gruss
"Holger Boskugel" wrote:
Hi Simon,.
Genau in der Richtung sollte es gehen. Nun ich hätte noch schreibensollen,
dass sich die ganze Kommunikation zwischen einer Client .NET (2.0)Anwendung
und einer PHP Seite abspielen würde. Die übliche (günstigere) WebproviderLinuxbasis
bieten meistens nur Service (Serverscript und Datenbank) auf der
und das sind dann eben PHP und mySQL.
genau darauf hab ich mit meiner Antwort auch fokusiert.
Wenn ich also auf der Serverseite PHP verwende, dann muss die Seite soerhält.
programmiert werden, dass sie Parameter entwender über URL oder POST
Über POST kann ich die nicht senden, weil ich die Controls in meinerAlso
Applikation gar nicht zur Gesicht bekomme und wenn das so wäre, kann ich
schwer ein Formular ausfüllen und absenden innerhalb meiner Applikation.
werde ich Anfragen an mySQL sehr wahrscheinlich über URL an meine PHPSeite
senden müssen. Ich könnte die Parameter aber sicher verschlüsseln, denkeich.
Bei der Antwort der PHP Seite kann ich dann so eine Art XML Datei mitDaten
seitens PHP generieren (es wäre eigentlich eine HTML Datei, die einen XML
Code anzeigt).
Erste Frage hier wäre was genau machst Du in Deiner Anwendung denn die
Aussage "weil ich die Controls in meiner Applikation gar nicht zur Gesicht
bekomme und wenn das so wäre, kann ich schwer ein Formular ausfüllen
und absenden innerhalb meiner Applikation." irritiert mich arg. Welche
Controls werden benutzt ? und wie wird die Anfrage an den Web-/SQL-
Server in Deiner Anwendung gestartet ??
Die diskutierte Funktionalität geht natürlich nur wenn Du die Daten der
Controls selbst im Zugriff hast und damit sowohl den Request zusammen-
bauen kannst als auch den Response zerlegen und die Daten den Controls
zur Verfügung stellen. Für die Kommunikation zum Server steht Dir dann
der System.Net.WebClient und System.Net.HttpWebRequest zur Verfügung.
Ich benutze derzeit den letzteren bei einer Kommunikation mit AMAZON
und beim Abruf von Daten von einem "fremden" SQL-Server im Internet.
Bei letzterem Projekt kann ich jedoch mit GET / QueryString arbeiten, aber
prüfe ebenso über Header-Variablen im Request die Gültigkeit der Daten-
Abfrage.
Ich bin schon etwas genervt, dass es absolut keineKommunikationsmöglichkeit
zwischen Clients im Web gibt, die einfach realisiert werden kann. Fastalle
Technologien basieren entwender an bestimmten Ports (die in meisten Fällen
geschlossen sind) oder man braucht zusätzliche Apllikationen auf der
Serverseite (was bei heutigen Provider gar nicht akzeptiert wird).
Wie schon gesagt, wenn Du die Controls in Deiner Anwendung direkt handelen
kannst, dann bist Du lediglich auf eine HTTP-Kommunikation über den
Standard-
Port 80 angewiesen was keinen oder nur geringen administrativen Aufwand
bedeuten sollte !
kannVielen Dank für die Bestätigung, aber genau das ist mein Problem. Ich
Link,in
so einem Fall meine Variablen nur über Header senden bzw. über den
dortden
ich in meiner Applikation aufrufen würde und das würde einSicherheitsrisiko
darstellen. Besonderes wenn ich dadurch beliebige SQL Abfragen (auchINSERT
oder DELETE) zusenden würde!
KAnn der Anwender überhaupt sehen was ich im Code für eine dynamischeSeite
aufrufe? Falls er Firewall hat, wird sich der schon melden, aber wird
spezielledie ganze URL angezeigt inklusive alle Variablen die in der URL
zusammengefügt wurden?
Verschlüsseln des Links geht, denke ich, nicht, oder?nützen
Gibt es sonst welche Möglichkeiten die Standard Provider Angebote zu
und dabei eine Applikation entwickeln die auf dem Client keine
HTTP-Anforderungen stellt (wie etwa spezifische Ports frei schalten o.ä.)?
Der Anwender sieht normalerweise nur die URL, denn das XML der Query
wird ja per POST übermittelt nicht per GET ! Einzig mit einem TCPIP-
Sniffer sollte er dann den Inhalt sehen. Du könntest aber z.B. in den
GUIDHeader drei Variablen schreiben, wie :
X-SQL-Call-ID : <hier einen GUID-String>
X-SQL-Reference : <hier den MD5/SHA1 Hash der GUID>
X-SQL-ID : <hier den MD5/SHA1 Hash des SQL-Befehls verknüpft mit der
Verständnis :des Calls>
So könntest du Prüfen ob die Anforderung in sich stimmig ist. Sprich
Du vergleichst die Daten die Du bekommst wieder mit den Hashes.
Die Call-ID ließe sich auch mit ins XML verpacken :
<query id="<hier einen GUID-String>">
<sql>select * from MyTable</sql>
</query>
Die Schritte wären dann :
a) Extrakt der GUID aus dem XML
b) Extract des SQL aus dem XML
c) Extract des X-SQL-Reference-Headers
d) Extract des X-SQL-ID-Headers
e) Vergleich des MD5/SHA1 aus der GUID (a) mit dem Reference-Header (c)
f) Vergleich des MD5/SHA1 aus SQL + GUID mit dem ID-Header (d)
Wenn beide Vergleiche stimme dann Ergebnis zurückgeben ansonsten :
a) einen Fehler oder
b) einen Bad Request (HTTP 400?)
Gruß
Holger
PS : Hier mal noch der Client Request vielleicht zum besseren
die
POST /db/query HTTP/1.0
Host: myhost.de
User-Agent: MyAgent
X-SQL-Call-ID : abcdef0123456789abcdef0123456789
X-SQL-Reference : 0123456789abcdef0123456789abcdef01234567
X-SQL-ID : abcdef0123456789abcdef0123456789abcdef01
<query id="abcdef0123456789abcdef0123456789">
<sql>select * from MyTable</sql>
</query>
oder in der kürzeren Form :
POST /db/query HTTP/1.0
Host: myhost.de
User-Agent: MyAgent
X-SQL-Reference : 0123456789abcdef0123456789abcdef01234567
X-SQL-ID : abcdef0123456789abcdef0123456789abcdef01
<query id="abcdef0123456789abcdef0123456789">
<sql>select * from MyTable</sql>
</query>
"Holger Boskugel" wrote:einbauen.
Hallo Simon,
Ich würde gerne in meinen Anwendungen auch einen Webinterface
Die
Möglichkeiten sind gross, weil man hätte eine Zentralle stelle,
auf.allen
mySQLgestarteten Applikationen gemeinsam wäre (in meinem Fall z.B. die
Datenbank auf dem Web).
Nun je mehr ich darüber nachdenke, desto mehr Probleme tauchen
FirmenSchon
beim Versuch die einfache Verbindung zu einer Web mySQL Datenbankaufzubauen,
scheitert aus! Das Problem sind die Ports, die bei den meisten
Portsfreischaltungzu
Anwendungsind
(und vermehrt auch bei Privatanwender). Und ich will nicht eine
schreiben, die dann eine lange Anleitung für die
dasbraucht!
Anwendungen
Weiss jemand wie man am einfachsten die Gemeinsame Basis für die
schaffen kann, ohne dabei spezielle Ports verwenden zu müssen, so
realisierenalles
eigentlich über 8080 geht, weil 8080 immer frei wäre?
Ich habe mir überlegt eine Art Seitenaufrufs im Code zu
dann(das
hab
ich schon öfters gemacht). Die Seite wäre eine PHP Seite, die mir
Serverentsprechende Informationen (z.B. XML Datei) dynamisch auf dem
(z.B.generieren würde. Das Problem ist aber, dass ich alle Parameter
aberSQL
Abfragen) an den Seitenaufruf anhängen müsste! Das gefällt mir
8080?nicht
so
:(
Wie ist es eigentlich mit Directory Services, brauchen die auch
dassSoweit
es mir noch in Erinnerung geblieben ist, ist dort das Problem,
beiman
auf
der Serverseite spezielle Dienste einrichten muss, was natürlich
willeinem
Proffessionelen Provider nicht gemacht wird und eigenen Server
z.B.ich
PHP/ASP/JSPnicht
aussetzen.
Für alle Vorschläge, vielen Dank im Voraus.
Im Prinzip hast Du Dir ja schon selbst geantwortet, in dem Du
benutzenauf der Server-Seite nutzt und damit auch einen normalen 80er Port
könntest. Das SQL ließe sich in eine POST-Anforderung verpacken die
identi-im HTTP-Header entweder nur über den "Content-Type" = "text/xml"
fiziert wird oder über eine/mehrer eigene Header-Variablen.
Im übrigen könnte man mittels der Credentials noch einen Schritt weiter
gehen und die PHP-Seite in ein geschütztes Verzeichnis legen und per
UserName/Password nur einen Zugriff zulassen.
Gruß
Holger
- Follow-Ups:
- Re: Windows Anwendungmit einer Web mySQL als Backend?
- From: Tobias Müller
- Re: Windows Anwendungmit einer Web mySQL als Backend?
- References:
- Re: Windows Anwendungmit einer Web mySQL als Backend?
- From: Holger Boskugel
- Re: Windows Anwendungmit einer Web mySQL als Backend?
- From: Sim
- Re: Windows Anwendungmit einer Web mySQL als Backend?
- From: Holger Boskugel
- Re: Windows Anwendungmit einer Web mySQL als Backend?
- From: Sim
- Re: Windows Anwendungmit einer Web mySQL als Backend?
- From: Holger Boskugel
- Re: Windows Anwendungmit einer Web mySQL als Backend?
- Prev by Date: Re: DataView...?
- Next by Date: Re: Datagridview und Celle alsWährung festlegen
- Previous by thread: Re: Windows Anwendungmit einer Web mySQL als Backend?
- Next by thread: Re: Windows Anwendungmit einer Web mySQL als Backend?
- Index(es):
Relevant Pages
|
Loading