Re: Windows Anwendungmit einer Web mySQL als Backend?




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 schreiben
sollen,
dass sich die ganze Kommunikation zwischen einer Client .NET (2.0)
Anwendung
und einer PHP Seite abspielen würde. Die übliche (günstigere) Webprovider
bieten meistens nur Service (Serverscript und Datenbank) auf der
Linuxbasis
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 so
programmiert werden, dass sie Parameter entwender über URL oder POST
erhält.
Über POST kann ich die nicht senden, 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.
Also
werde ich Anfragen an mySQL sehr wahrscheinlich über URL an meine PHP
Seite
senden müssen. Ich könnte die Parameter aber sicher verschlüsseln, denke
ich.
Bei der Antwort der PHP Seite kann ich dann so eine Art XML Datei mit
Daten
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 keine
Kommunikationsmöglichkeit
zwischen Clients im Web gibt, die einfach realisiert werden kann. Fast
alle
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 !

Vielen Dank für die Bestätigung, aber genau das ist mein Problem. Ich
kann
in
so einem Fall meine Variablen nur über Header senden bzw. über den
Link,
den
ich in meiner Applikation aufrufen würde und das würde ein
Sicherheitsrisiko
darstellen. Besonderes wenn ich dadurch beliebige SQL Abfragen (auch
INSERT
oder DELETE) zusenden würde!

KAnn der Anwender überhaupt sehen was ich im Code für eine dynamische
Seite
aufrufe? Falls er Firewall hat, wird sich der schon melden, aber wird
dort
die ganze URL angezeigt inklusive alle Variablen die in der URL
zusammengefügt wurden?

Verschlüsseln des Links geht, denke ich, nicht, oder?

Gibt es sonst welche Möglichkeiten die Standard Provider Angebote zu
nützen
und dabei eine Applikation entwickeln die auf dem Client keine
spezielle
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
HTTP-
Header 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
GUID
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
Verständnis :

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:

Hallo Simon,

Ich würde gerne in meinen Anwendungen auch einen Webinterface
einbauen.
Die
Möglichkeiten sind gross, weil man hätte eine Zentralle stelle,
die
allen
gestarteten Applikationen gemeinsam wäre (in meinem Fall z.B. die
mySQL
Datenbank auf dem Web).
Nun je mehr ich darüber nachdenke, desto mehr Probleme tauchen
auf.
Schon
beim Versuch die einfache Verbindung zu einer Web mySQL Datenbank
aufzubauen,
scheitert aus! Das Problem sind die Ports, die bei den meisten
Firmen
zu
sind
(und vermehrt auch bei Privatanwender). Und ich will nicht eine
Anwendung
schreiben, die dann eine lange Anleitung für die
Portsfreischaltung
braucht!

Weiss jemand wie man am einfachsten die Gemeinsame Basis für die
Anwendungen
schaffen kann, ohne dabei spezielle Ports verwenden zu müssen, so
das
alles
eigentlich über 8080 geht, weil 8080 immer frei wäre?

Ich habe mir überlegt eine Art Seitenaufrufs im Code zu
realisieren
(das
hab
ich schon öfters gemacht). Die Seite wäre eine PHP Seite, die mir
dann
entsprechende Informationen (z.B. XML Datei) dynamisch auf dem
Server
generieren würde. Das Problem ist aber, dass ich alle Parameter
(z.B.
SQL
Abfragen) an den Seitenaufruf anhängen müsste! Das gefällt mir
aber
nicht
so
:(

Wie ist es eigentlich mit Directory Services, brauchen die auch
8080?
Soweit
es mir noch in Erinnerung geblieben ist, ist dort das Problem,
dass
man
auf
der Serverseite spezielle Dienste einrichten muss, was natürlich
bei
einem
Proffessionelen Provider nicht gemacht wird und eigenen Server
will
ich
nicht
aussetzen.

Für alle Vorschläge, vielen Dank im Voraus.

Im Prinzip hast Du Dir ja schon selbst geantwortet, in dem Du
PHP/ASP/JSP
auf der Server-Seite nutzt und damit auch einen normalen 80er Port
benutzen
könntest. Das SQL ließe sich in eine POST-Anforderung verpacken die
z.B.
im HTTP-Header entweder nur über den "Content-Type" = "text/xml"
identi-
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



.



Relevant Pages

  • Re: VB.net and ASP.Net Typed Datasets
    ... really needs these controls, that is a way to do it and still write the app. ... ASP.NET applications have many more advantages and so ... For these reasons we wish to use ASP.net, to have a Smart Client. ... used in any .NET language. ...
    (microsoft.public.dotnet.framework.adonet)
  • Re: VB.net and ASP.Net Typed Datasets
    ... be as robust as it can be if you build the app with Windows ... For these reasons we wish to use ASP.net, to have a Smart Client. ... inadequacies with the web controls and the winform. ... used in any .NET language. ...
    (microsoft.public.dotnet.framework.adonet)
  • Re: VB.net and ASP.Net Typed Datasets
    ... be as robust as it can be if you build the app with Windows ... inadequacies with the web controls and the winform. ... The web forms controls must render to the client as standard ... used in any .NET language. ...
    (microsoft.public.dotnet.framework.adonet)
  • Re: VB.net and ASP.Net Typed Datasets
    ... you can host Windows Forms via an ASP.NET web page. ... For these reasons we wish to use ASP.net, to have a Smart Client. ... inadequacies with the web controls and the winform. ... used in any .NET language. ...
    (microsoft.public.dotnet.framework.adonet)
  • Re: Windows Anwendungmit einer Web mySQL als Backend?
    ... dass sie Parameter entwender über URL oder POST ... Applikation gar nicht zur Gesicht bekomme und wenn das so wäre, ... Aussage "weil ich die Controls in meiner Applikation gar nicht zur Gesicht ... Der Anwender sieht normalerweise nur die URL, denn das XML der Query ...
    (microsoft.public.de.german.entwickler.dotnet.vb)

Loading