Laden...

Welche Datentechnologie für WebClient mit Rechtesystem?

Erstellt von martl vor 13 Jahren Letzter Beitrag vor 13 Jahren 984 Views
M
martl Themenstarter:in
23 Beiträge seit 2009
vor 13 Jahren
Welche Datentechnologie für WebClient mit Rechtesystem?

Hallo,

ich entwerfe gerade ein Programm welches Clientseitig läuft und Daten von einem dezentralen Server läd, aufbereitet und darstellt. Das ganze hat ein Rechtesystem, nicht jeder User darf alle Daten lesen bzw. schreiben.

Meine derzeitige Idee ist der C# Client mit einer dezentralen mySQL Datenbank. Da ich Aufgrund des Rechtesystems nicht direkt mit der Datenbank arbeiten kann wollte ich PHP Skripte als Zwischenschicht einsetzen, welche sich um die Authentifizierung kümmern. Als Datenformat würde ich XMLs nutzen. Der C# Client würde sich beim Start eine Session vom PHP holen und diese für alle Anfragen an das PHP nutzen.

Da man ja nie weiß was mal so kommt würde ich wahrscheinlich versuchen das ganze mit DataSets, XmlRead und DataTableAdapters umzusetzen. Ich weiß nicht ob ich da zu optimistisch denke, aber vielleicht könnte ich so den dezentralen Server, sofern es mal eine Anforderung wird, gegen eine lokale Datenbank austauschen.

Gibt es vielleicht eine bessere Alternative?

3.728 Beiträge seit 2005
vor 13 Jahren
Bestandsaufnahme

Hallo martl,

welche Bestandteile des Projekts sind den bereits vorhanden?
Gibt es diese PHP Serveranwendung schon, oder wird der erst noch entwickelt.

Was meinst Du mit "dezentralem Server"?
Was hat die PHP Serveranwendung für eine API (SOAP, REST, Plain-HTTP, AJAX)?
Was verstehst Du unter "XMLs"?
Was ist der Zweck dieser Software im praktischen Sinne?
Wie sind die "Daten" beschaffen und strukturiert?

Ich brauche mehr Informationen über das Projekt, um Dir sinnvoll weiterhelfen zu können.

M
martl Themenstarter:in
23 Beiträge seit 2009
vor 13 Jahren

Die Anwendung ist bisher noch in der Planung, mit der Entwicklung habe ich noch nicht begonnen. Zweck der Anwendung ist eine Datenbank für Unternehmensinterne Daten. Das Unternehmen hat mehrere Niederlassungen.

Mit dezentralem Server meine ich einen standard dedicated Server oder vServer. Das macht in Sachen Anbindung, Verfügbarkeit und Kosten den meisten Sinn.

Die PHP Anwendung gibt es ebenfalls noch nicht. Ich würde wahrscheinlich eine Plain-HTTP Lösung mit einfacher XML Ausgabe vorziehen. Das ganze könnte ich gut mit einem MVC Framework wie beispielsweise CakePHP umsetzen, womit es später nicht so aufwendig wäre noch eine komplette Web-Version nachzuschieben. Eine SSL Verschlüsselung ist auch ein leichtes. Um die PHP/MySQL Umsetzung mache ich mir keine großen Gedanken, ich bin seit 6 Jahren hauptberuflicher Webentwickler.

Die Daten selbst sind ganz normale relationale Daten mit 1:n Beziehungen. Alles Text und Zahlen, keine Grafiken oder sonstigen Binärsachen.

Was für Möglichkeiten hat C# denn, um Datenquellen möglichst so flexibel anzusprechen, dass man diese später mit möglichst wenig Aufwand austauschen kann? Meine Traumvorstellung wäre das ich die HTTP/XML Datenquelle später bequem durch eine lokale Sqlite Datenbank ersetzen kann. Ich glaube aber nicht das ein DataTableAdapter dafür geeignet ist.

A
69 Beiträge seit 2010
vor 13 Jahren

Nichts für ungut aber "dezentraler Server" ist etwas komplett anderes als ein zentraler Server auf einem vServer oder normalem Server.

Was für Möglichkeiten hat C# denn, um Datenquellen möglichst so flexibel anzusprechen, dass man diese später mit möglichst wenig Aufwand austauschen kann?

Viele. Das obliegt dir, ob du diese nutzt. Eine absolut strickte und saubere Trennung zwischen Datenzugriff und dem Rest der Anwendung ist hier Pflicht.

Meine Traumvorstellung wäre das ich die HTTP/XML Datenquelle später bequem durch eine lokale Sqlite Datenbank ersetzen kann

Evtl wäre das hier ein Anwendungsfall von Linq2Xml und Linq2Sql. Ich bin mir aber nicht sicher, inwiefern ein Switch der beiden Aufwände bereitet.

Da ich Aufgrund des Rechtesystems nicht direkt mit der Datenbank arbeiten kann wollte ich PHP Skripte als Zwischenschicht einsetzen, welche sich um die Authentifizierung kümmern. Als Datenformat würde ich XMLs nutzen. Der C# Client würde sich beim Start eine Session vom PHP holen und diese für alle Anfragen an das PHP nutzen.

Ich persönlich würde das mit WCF machen. Da hast du weitaus mehr möglichkeiten bei der Transportschicht und Sicherheitsschicht und das ohne zusatzaufwand.

Zudem könntest du dann die WCF Serveranwendung auch ohne weiteres auf dem Clientsystem laufen lassen, wenn der Kunde das so wünscht, ohne deine Clientanwendung oder Serveranwendung anpassen zu müssen.

3.728 Beiträge seit 2005
vor 13 Jahren

Mit dezentralem Server meine ich einen standard dedicated Server oder vServer. Das macht in Sachen Anbindung, Verfügbarkeit und Kosten den meisten Sinn.

Der Server steht also bei einem Provider? Deshalb PHP, da das Hosting dafür sehr günstig ist.

Die PHP Anwendung gibt es ebenfalls noch nicht. Ich würde wahrscheinlich eine Plain-HTTP Lösung mit einfacher XML Ausgabe vorziehen. Das ganze könnte ich gut mit einem MVC Framework wie beispielsweise CakePHP umsetzen, womit es später nicht so aufwendig wäre noch eine komplette Web-Version nachzuschieben.

PHP und C# sind ganz verschiedene Welten. Es gibt auch kein gemeinsames Typsystem usw. Ich würde mir gut überlegen, ob ich ein neues Projekt von vornherein gleich auf verschiedenen Platformen stellen würde. Mit einer 100% .NET Lösung (also auch mit .NET Server) hast Du am Ende ein System, wo alles zusammenspielt, ohne Kompromisse eingehen zu müssen. Für ein paar Mücken mehr, bekommst Du auch einen Windows-Server bei einem ISP, der .NET Webdienste (SOAP) hosten kann. Auch wenn Du später ein Web-Frontend nachschieben willst, kannst Du das mit ASP.NET machen.

Was den Server angeht, möchte ich mich meinem Vorredner anschließen, und Dir WCF empfehlen. Selbst wenn Du Dich doch für PHP entscheidest, kannst Du WCF für die Anbindung des C#-Clients an den PHP-Server verwenden. Du solltest dann aber besser SOAP statt plain-HTTP einsetzen, da dafür die Unterstützung besser ist. Es gibt auch für PHP einige gute SOAP-Erweiterungen.

Was für Möglichkeiten hat C# denn, um Datenquellen möglichst so flexibel anzusprechen, dass man diese später mit möglichst wenig Aufwand austauschen kann? Meine Traumvorstellung wäre das ich die HTTP/XML Datenquelle später bequem durch eine lokale Sqlite Datenbank ersetzen kann. Ich glaube aber nicht das ein DataTableAdapter dafür geeignet ist.

Mit DataSets hast Du neutrale Datencontainer, die von beliebigen Datenquellen befüllt werden können (über entsprechende DataAdapter oder bei Bedarf auch manuell). DataSets haben auch gute XML-Unterstützung (auch XML-Schema). Wenn Du Typsicherheit haben willst (OR-Mapping), kannst Du mit dem DataSet-Designer auch typisierte DataSets erzeugen.

Linq2SQL und EntityFramework eignen sich nur sehr eingeschränkt für verteilte Anwendungen, da die erzeugten Business-Objekte keinen Zeilenstatus haben (sie wissen nicht, ob sie neu, geändert oder gelöscht sind). DataSets sind dagegen für verteilte Szenarien und auch für Offline-Clients ausgelegt. Wer LINQ mag, kann das auch mit DataSets nutzen, denn es gibt auch Linq2DataSet.