mmofacts.com

Turoials/Bücher zum Erstellen von Webseiten mit C# mit und ohne ASP.NET

gepostet vor 15 Jahre, 7 Monate von DrakeL

Hi,

ich möchte mal etwas von PHP weg schauen in Richtung Webentwicklung C# mit oder ohne ASP.NET (das weiß ich noch nicht genau, da ich noch nicht genau weiß was ASP.NET ist, bisher hab ich das Gefühl es ist etwas das Gleiche wie JSP bei Java, kann das sein?).

Ich habe mir für C# nun ein Buch gekauft "C# von Kopf bis Fuss" und lese nebenbei dazu das E-Book von Galileo Openbook "Visual C# 2008". Leider ist in beiden Büchern nichts zur Entwicklung von Webseiten enthalten...

Kennt Ihr ein Tutorial oder Buch, bei denen die Entwicklung von Webseiten mit C# und verschiedenen Wege beschrieben wird jeweils mit oder ohne ASP.NET? (mit Wege mein ich damit die Konzepte, bei Java zum Beispiel rein Servlets, JSP und/oder JSF etc.). Ein kurzer Einblick würde mir erstmal reichen um sehen zu können, wie man eine Webseite von der Logik her aufbauen könnte. Weiterführende Lektüre würde ich mir dann holen sobald ich die Grundlagenbücher komplett durchgearbeitet habe und mehr Vor- als Nachteile in C# gegenüber PHP sehe.

PS: Meinungen, ob ein solcher Umstieg von PHP zu C# ein guter Schritt wäre sind natürlich auch Willkommen. :)

Des weiteren wäre vor allem natürlich dann auch die Frage der Veröffentlichung einer solchen Webseite. Benötigt man dann auf jeden Fall einen VServer bzw. Root-Server? Bisher der Größte Nachteil bei einer solchen Umstellung wäre mich der Kostenpunkt, da Webspaces mit PHP Unterstützung ja sehr günstig überall zu haben sind.

gepostet vor 15 Jahre, 7 Monate von kevka

Werde mein BG (wenn ich doch nur einmal Zeit hätte) auch in C# schreiben.

Für die Kommunikation mit dem Client kann ich dir folgende Tutorials empfehlen:

http://www.c-sharpcorner.com/UploadFile/ialam/CreatingWebServerInCS12022005042042AM/CreatingWebServerInCS.aspx

http://www.computerleben.net/artikel/Einfacher_Webserver-287.html

Pick dir einfach das beste von beiden heraus. Beide Beipiele sind natürlich optimierungsfähig, so solltest du vielleicht mal nachmessen, was wie lange braucht und ob du irgendwie das Tempo erhöhen kannst.

Auch die HTTP-Spezifikation kann dir vielleicht helfen.

Außer der HTTP-Server Schicht, brauchst du grob gesehen noch eine, die mit einer DB kommuniziert (falls du einen WinServer hast, würde ich dir den Microsoft SQLServer Express empfehlen), wobei du aber bei C# auch viel cachen kannst und so somit auch mit XML-Files auskommen kannst (schau dir in dem Zusammenhang mal System.Xml.Linq an), außerdem braucht du noch eine Art "verarbeitende" Schicht, die dir die Daten vom Client verarbeitet und auch mit der Datenschicht kommuniziert.

Also viel Glück und wenn ich mal Zeit habe können wir ja vielleicht mal Erfahrungen austauschen.

MfG Kevka

gepostet vor 15 Jahre, 7 Monate von DrakeL

Original von kevka

[...]

Pick dir einfach das beste von beiden heraus. Beide Beipiele sind natürlich optimierungsfähig, so solltest du vielleicht mal nachmessen, was wie lange braucht und ob du irgendwie das Tempo erhöhen kannst.

Gibt es bei C# nicht etwas vergleichbares wie bei Java die Servlets? Wollte eigentlich nicht unbedingt einen kleinen Webserver schreiben. :)

Vor allem Dinge wie Session, Cookies usw. werden bei Servlets ja durch den Container übernommen (ich hoffe ich red jetzt nicht blödsinn, hab mit Java Servlets mehr theoretische Erfahrungen gemacht). Das würde ich ungern selbst schreiben wollen.

Das dürfte dann vielleicht eher Richtung IIS und ASP.NET gehen, oder? Ich hoffe ja man kann bei ASP.NET wiederkehrende Teile der Seite wiederverwenden (vergleichbar mit einem include in PHP), bisher habe ich bei allen Beispielen nur gesehen, dass die komplette HTML Seite definiert wurde. :)

Außer der HTTP-Server Schicht, brauchst du grob gesehen noch eine, die mit einer DB kommuniziert (falls du einen WinServer hast, würde ich dir den Microsoft SQLServer Express empfehlen), wobei du aber bei C# auch viel cachen kannst und so somit auch mit XML-Files auskommen kannst (schau dir in dem Zusammenhang mal System.Xml.Linq an), außerdem braucht du noch eine Art "verarbeitende" Schicht, die dir die Daten vom Client verarbeitet und auch mit der Datenschicht kommuniziert.

Datenbank würde mir da eher gefallen, da ich eh schon sehr viel mit Datenbanken arbeite. Welche weiß ich da allerdings noch nicht, ich schwanke so zwischen Microsoft SQL Server (wegen der anscheinend guten Integration im Visual C#), DB2 (da ich beruflich mit der Datenbank arbeite) und MySQL. Sollte aber eher eine SQL Datenbank sein rein aus der Gewohnheit heraus.

Also viel Glück und wenn ich mal Zeit habe können wir ja vielleicht mal Erfahrungen austauschen.

Sehr gerne, Kontaktdaten dürften in meinem Profil einsehbar sein (Notfalls reicht auch eine PN).

gepostet vor 15 Jahre, 7 Monate von KoMtuR

Original von DrakeL

Gibt es bei C# nicht etwas vergleichbares wie bei Java die Servlets? Wollte eigentlich nicht unbedingt einen kleinen Webserver schreiben. :)

Vor allem Dinge wie Session, Cookies usw. werden bei Servlets ja durch den Container übernommen (ich hoffe ich red jetzt nicht blödsinn, hab mit Java Servlets mehr theoretische Erfahrungen gemacht). Das würde ich ungern selbst schreiben wollen.

Das dürfte dann vielleicht eher Richtung IIS und ASP.NET gehen, oder? Ich hoffe ja man kann bei ASP.NET wiederkehrende Teile der Seite wiederverwenden (vergleichbar mit einem include in PHP), bisher habe ich bei allen Beispielen nur gesehen, dass die komplette HTML Seite definiert wurde. :)

Also soweit ich mich noch richtig an das Praktikum in der Uni erinnere, wo wir mit C# programmieren mussten, dann gibts einen Frontcontroller vor der Seite, wie bei Java das Servlet. Wird aber genauso, wie das Servlet kein Zwang sein. Und wie du die Session in Java regelst und die Cookies ist dir überlassen. Wobei das bei Cookies dann ausartet in Javacode in der JSP-Seite (Session allgemein ist in JSP mehr transparent, als man denkt).

Und es gibt auch so ne Art Templates für ASP, wo du dann halt die nötigen Sachen einbauen kannst. Nur weiß ich nicht mehr wie es heißt, ich weiß nur das es das Zeugs gibt ;) Für kleinere Teile in der Seite schreibst du Komponenten, die du dann auf der Seite als APS-Tags in die eigentliche Seite einbaust.

So die C#-Entwickler. Nun net hauen, wenn ich bissl Mist erzählt hab :D Ich konnte das Praktikum schon nicht ab, weil ich den direkten Vergleich endlich mal am eigenen Leibe gespürt hab ;) Da vergisst man schonmal paar Sachen

gepostet vor 15 Jahre, 7 Monate von altertoby

Dann will ich mal :)

Also grundsätzlich gibt es 2 mir bekannte Wege mit c# eine Webseite zu erstellen. Der erste ist der bereits genannte eigene Webserver (da empfehle ich dir mal den Blog von Undead zu durchstöbern, der hat nen eigenes Ding in Betrieb und es soll auch garnicht so schwer/viel sein). Ich kann dir aber mehr über die Erstellung mit Asp.net erzählen:

Also das grundlegende Prinzip ist, dass du verschiedene Controls (Button, Textbox,...oder sogar eigene) auf die Seite packst und dann auf entsprechende Events (Click, TextChange,...) reagierst. (Das dabei ein Postback ausgeführt wird ist logisch, also wenn der User den Button klickt werden die Daten dabei zum Server geschickt). Dabei kannst du in dem Event genauso wie in jeder WindowsForms-Anwendung mit den Controls über "Control"."Eigenschaft" "sprechen". Also den ganzen Krams wie Postvariablen usw. übernimmt .Net für dich. (natürlich kannst du die auch noch gezielt selber ansprechen).

Zu dem "Template-System". Wie bereits erwähnt gibt es die Möglichkeit eigene Controls zu schreiben (z.B. Loginmaske samt Funktionalität auszulagern) und diese dann einzubinden. Dies nutzten wir z.B. zur Darstellung von Karten-Koordianten (sind anklickbar und noch nen bissel was anderes) oder allgemein für kleinere, öftere wiederkehrende, in sich geschlossene Dinge. Für größere gibt es das Prinzip der MasterPages. Da definierst du den Rahmen (das ganze Html-Asp.net-Zeugs) und einen/mehrere Platzhalter, die du dann auf deinen Seiten füllen kannst (oder eben nicht, dann wird ein von dir definierter Standardinhalt angezeigt).

Ich denke ich hab dir nen paar Begriffe zum googeln gegeben, ansonsten kann ich dir nur die Videos von http://www.asp.net/get-started/ empfehlen. Aber bevor du da Sachen einsetzt umbedingt nochmal googeln (z.B. Data-Binding ist gut und schön, besonders mit DataSets, aber das kostet auch alles Performance und sollte daher gut überlegt werden).

Zum Vergleich zu anderem Sprachen kann ich leider nix sagen (außer du willst meine Meinung nach ca. 10 Std. Programmieren in php im Vergleich zu c# wissen...ich denke aber die Anzahl der Stunden gibt einen kleinen Hinweis auf meine "Beziehung" zu php). Aber was ich da kennen gelernt hab ist grundlegend anders als der Asp.Net-Weg. Es wird also eine nicht minder kleine Umstellung für dich :)

gepostet vor 15 Jahre, 7 Monate von TheUndeadable

> Das dürfte dann vielleicht eher Richtung IIS und ASP.NET gehen, oder?
> Ich hoffe ja man kann bei ASP.NET wiederkehrende Teile der Seite wiederverwenden
> (vergleichbar mit einem include in PHP), bisher habe ich bei allen Beispielen nur
> gesehen, dass die komplette HTML Seite definiert wurde. :)

Ja. Aber nicht so einfach und fehleranfällig wie in PHP, sondern über WebControls und MasterPages.

> MySQL

Achte auf die GPL. Ich empfehle freie Datenbanken wie PostgreSQL oder SQL Server. Letzterer hat aber eine 2 GB Begrenzung.

Ich persönlich habe den HttpListener genutzt und eine eigene HTTP-Verarbeitung geschrieben. Hält sich mit wenigen Klassen in Grenzen. Die Implementierung findest du im Quellcode, den du über http://fbk.depon.net erreichen kannst. Beachte: AGPL. Anschauen und Ideen sammeln ist OK, aber Quellcode übernehmen nicht (es sei denn du möchtest dein BG unter die AGPL-Lizenz stellen).

gepostet vor 15 Jahre, 7 Monate von DrakeL

Original von altertoby

Dann will ich mal :)

Also grundsätzlich gibt es 2 mir bekannte Wege mit c# eine Webseite zu erstellen. Der erste ist der bereits genannte eigene Webserver (da empfehle ich dir mal den Blog von Undead zu durchstöbern, der hat nen eigenes Ding in Betrieb und es soll auch garnicht so schwer/viel sein). Ich kann dir aber mehr über die Erstellung mit Asp.net erzählen:

Webserver will ich wie gesagt vermeiden, da ich es als unnötiger Overhead empfinde was die Entwicklungszeit betrifft.

Also das grundlegende Prinzip ist, dass du verschiedene Controls (Button, Textbox,...oder sogar eigene) auf die Seite packst und dann auf entsprechende Events (Click, TextChange,...) reagierst. (Das dabei ein Postback ausgeführt wird ist logisch, also wenn der User den Button klickt werden die Daten dabei zum Server geschickt). Dabei kannst du in dem Event genauso wie in jeder WindowsForms-Anwendung mit den Controls über "Control"."Eigenschaft" "sprechen". Also den ganzen Krams wie Postvariablen usw. übernimmt .Net für dich. (natürlich kannst du die auch noch gezielt selber ansprechen).

Zu dem "Template-System". Wie bereits erwähnt gibt es die Möglichkeit eigene Controls zu schreiben (z.B. Loginmaske samt Funktionalität auszulagern) und diese dann einzubinden. Dies nutzten wir z.B. zur Darstellung von Karten-Koordianten (sind anklickbar und noch nen bissel was anderes) oder allgemein für kleinere, öftere wiederkehrende, in sich geschlossene Dinge. Für größere gibt es das Prinzip der MasterPages. Da definierst du den Rahmen (das ganze Html-Asp.net-Zeugs) und einen/mehrere Platzhalter, die du dann auf deinen Seiten füllen kannst (oder eben nicht, dann wird ein von dir definierter Standardinhalt angezeigt).

Ich hab mal wegen MasterPages unter folgender Adresse geschaut:

http://msdn.microsoft.com/de-de/library/wtxbf3hh(VS.80).aspx

Wie mir scheint gibt es also eine/mehrere MasterPage und die verschiedenen Inhaltsseiten. Aber in dem Beispiel definiert die Inhaltsseite alle Platzhalter der MasterPage. Muss das immer so sein? Oder kann ich die Platzhalter in verschiedenen Dateien definieren?

Vielleicht als Hintergrund wie meine bisherige Vorgehensweise in PHP war, das mir recht gut gefallen hat:

  • Die Seite wird in drei Ebenen gegliedert, die unterste Ebene ist bei mir das Grundgerüst der Seite, welches für jeden Seitenaufruf gleich ist und Platzhalter definiert (head, left, right, bottom zum Beispiel für ein zwei Spaltenlayout)
  • In die Platzhalter werden Module wie Navigation und Inhaltsbereich eingesetzt. Pro Platzhalter können beliebig viele Module definiert werden
  • Eines der Module (das für den Inhaltsbereich) fordert vom Front Controller die (anhand der GET Parameter) aktuelle Inhaltsseite an und nimmt deren Ausgabe als Ausgabe für das Modul (daher für den Platzhalter,in welchem das Modul gelegt wurde)

Das Grundgerüst dürften dann die MasterPages sein und die Inhaltsseiten die Detailsseiten, aber so Sachen wie Navigation hätte ich gerne vom Grundgerüst getrennt, sodass ich Module beliebig auf andere Platzhalter verschieben kann oder erweitern/entfernen kann und doch für alle Seiten gleich, also nicht in der Detailsseite definiert.

Zum Vergleich zu anderem Sprachen kann ich leider nix sagen (außer du willst meine Meinung nach ca. 10 Std. Programmieren in php im Vergleich zu c# wissen...ich denke aber die Anzahl der Stunden gibt einen kleinen Hinweis auf meine "Beziehung" zu php). Aber was ich da kennen gelernt hab ist grundlegend anders als der Asp.Net-Weg. Es wird also eine nicht minder kleine Umstellung für dich :)

Vergleich interessiert mich eher in Richtung was brauche ich als Arbeitsumgebung. Bei PHP weiß ich es läuft bei fast jedem Hoster auf einem Webspace, benötigt lediglich einen Webserver wie Apache und PHP Modul. Java benötigt einen Container für Servlets und JSP wie zum Beispiel Tomcat.

Nur bei C# weiß ich nicht genau was ich da brauche. Soweit ich weiß brauche ich zum Beispiel für ASP.NET Seiten den IIS und somit als Betriebssystem Windows Server. Dies dürfte ja dann auch einen vserver oder rootserver benötigen.

Original von TheUndeadable

Ich persönlich habe den HttpListener genutzt und eine eigene HTTP-Verarbeitung geschrieben. Hält sich mit wenigen Klassen in Grenzen. Die Implementierung findest du im Quellcode, den du über http://fbk.depon.net erreichen kannst. Beachte: AGPL. Anschauen und Ideen sammeln ist OK, aber Quellcode übernehmen nicht (es sei denn du möchtest dein BG unter die AGPL-Lizenz stellen).

Schaue ich mir dann auch mal an. Übernehmen würde ich ungern, da ich schon alles soweit wie möglich selbst machen will (gerade am Anfang wenn ich die Sprache noch lerne). AGPL dürfte es am Ende aber vielleicht sogar werden.

PS: Ich habe mir derzeit den Visual C# Express runtergeladen, für ASP.NET benötige ich ja dann den Visual Web Developer Express, oder?

Achso, was auch interessant wäre, gibt es keine Zwischenstufe zwischen eigenen Webserver und ASP.NET, also wie bei Java die Servlets, dass ich Seiten rein per C# schreiben kann, aber alles HTTP spezifische ein Container/Basisklasse übernimmt?

gepostet vor 15 Jahre, 7 Monate von TheUndeadable

Nur bei C# weiß ich nicht genau was ich da brauche. Soweit ich weiß brauche ich zum Beispiel für ASP.NET Seiten den IIS und somit als Betriebssystem Windows Server. Dies dürfte ja dann auch einen vserver oder rootserver benötigen.

Es gibt auch reines ASP.Net-Webhosting.

gepostet vor 15 Jahre, 7 Monate von altertoby

Also soweit ich weiß gibt es nur die Möglichkeit in der Content-Seite die Platzhalter zu überschreiben (sprich in einer Datei, kein includen aus mehreren). Du könntest dein Ziel durch Kapselung von Masterpages erreichen oder du schreibst dir einfach ein eigenes Control (z.B. Menü oder oder) und bindest es dann ein, wenn du es brauchst. Das kommt wohl den includes am nähsten.

Du musst wie schon gesagt in der Content-Seite einen Platzhalter nicht überschreiben, sprich:

Masterpage - PlaceHolder mit Inhalt "abc"

1. Detailseite - PlaceHolder überschrieben mit "doch def"

2. Detailseite - PlaceHolder nicht beachtet (steht immernoch abc drinne)

Aber sonst alles was du mehr als 1 mal benutzt (im Regelfall, kleine Dinge wie nen bunten Link vllt nicht^^) in nen eigenes Web-Control packen und dann überall da definieren wo du es haben möchtest -:)

Zum Hosting hat Undead eig. alles gesagt :) Aber du hast da nicht die große Anbieterauswahl wie du die vllt. bei php hast...

Asp.Net ist nix anderes als dein Container...ok es kommt teilweise schon einem Containerschiff gleich, aber im Endeffekt schreibst du nur in c# und halt nen bissel Html-Zeugs.

gepostet vor 15 Jahre, 7 Monate von DrakeL

Original von altertoby

Also soweit ich weiß gibt es nur die Möglichkeit in der Content-Seite die Platzhalter zu überschreiben (sprich in einer Datei, kein includen aus mehreren). Du könntest dein Ziel durch Kapselung von Masterpages erreichen oder du schreibst dir einfach ein eigenes Control (z.B. Menü oder oder) und bindest es dann ein, wenn du es brauchst. Das kommt wohl den includes am nähsten.

Wenn ich bei dem oben geposten Link von mir richtig gelesen habe kann ich auch die MasterPages verschachteln, vielleicht wäre die Verschachtelung von MasterPages das was ich dann brauche. Werde ich mir mal genauer anschauen.

Aber sonst alles was du mehr als 1 mal benutzt (im Regelfall, kleine Dinge wie nen bunten Link vllt nicht^^) in nen eigenes Web-Control packen und dann überall da definieren wo du es haben möchtest -:)

Damit meinst du in jeder Inhaltsseite einbinden, in der ich das Menü haben will? Also jede, ne das ist genau das was ich nicht will, da ich dann alle Inhaltsseiten ändern müsste, wenn ich das Menü woanders haben möchte...

Zum Hosting hat Undead eig. alles gesagt :) Aber du hast da nicht die große Anbieterauswahl wie du die vllt. bei php hast...

Solang es mindestens ein Anbiter gibt der in Ordnung ist, macht das ja nichts. :) Kennt jemand einen guten Anbieter? Bräuchte dabei lediglich wenig Speicher, mindestens eine Datenbank und SSL. Domain ist nicht erforderlich.

gepostet vor 15 Jahre, 7 Monate von DrakeL

Original von DrakeL

Damit meinst du in jeder Inhaltsseite einbinden, in der ich das Menü haben will? Also jede, ne das ist genau das was ich nicht will, da ich dann alle Inhaltsseiten ändern müsste, wenn ich das Menü woanders haben möchte...

Soo, etwas besser informiert über MasterPages hab ich jetzt glaub ich eine Möglichkeit gefunden, die mir gefällt:

  • Eine MasterPage definiert das Grundgerüst mit Platzhaltern für Navigation, Inhalt etc.
  • Eine untergeordnete MasterPage fügt allen Platzhaltern (bis auf den für den Inhalt) WebControls hinzu, die Module wie Navigation werden dann als WebControl implementiert
  • Für jede Inhaltsseite wird dann eine Page gemacht, die dann die untergeordnete MasterPage als Master definiert

Auf diese Weise hab ich ein Grundgerüst der Seite, das ich sehr schnell ändern kann und Allgemein für alle Projekte verwenden kann (zum Beispiel mache ich ja ein HTML Grundgerüst für das YAML CSS Framework) und eine untergeordnete MasterPage in der ich genau sehe auf welche Platzhalter welche Module geladen werden, das kann ich dann pro Projekt unterschiedlich machen. Durch das Einbinden der Module als WebControls kann ich diese in verschiedenen Kompinationen wiederum in mehreren Projekten verwenden.

Ich hoffe dieses Vorgehen funktioniert auch nicht nur in der Theorie. :)

Gibt es dann eigentlich auch eine Möglichkeit Daten für alle Benutzer zu Cachen (ApplicationScope in Java oder memcache in PHP)? Dann könnte ich die Navigation auch dynamisch generieren, indem ich die Verzeichnisstruktur der .aspx Dateien auslese oder auch die Sprachdateien für die Mehrsprachigkeit usw.

gepostet vor 15 Jahre, 7 Monate von altertoby

Hi,

@Masterpages

ja so ähnlich hab ich das auch gedacht, auch wenn ich  nicht unbedingt verstehe warum du eine 2. Masterpage brauchst:

  • Masterpage: Definiert Grundgerüst + Standard-Webcontrol-Anordnung
  • Content-Page: Definiert Inhalt und überschreibt evt. die Anordnung

Wenn du dann Global eine andere Anordnung haben möchtest, musste einfach die Masterpage ändern... außer du möchtest für verschiedene "Abteilungen" (z.B. Nachrichtensystem und Bauen-System) insgesamt was verändern. Dann macht eine Sub-Masterpage pro Abteilung durchaus Sinn.

@Cachen:

Application-weites Cachen: http://msdn.microsoft.com/en-us/library/6hbbsfk6.aspx

oder allgemein Cachen in Asp.Net: http://msdn.microsoft.com/en-us/library/ms178597.aspx

gepostet vor 15 Jahre, 7 Monate von DrakeL

Original von altertoby

ja so ähnlich hab ich das auch gedacht, auch wenn ich  nicht unbedingt verstehe warum du eine 2. Masterpage brauchst:

  • Masterpage: Definiert Grundgerüst + Standard-Webcontrol-Anordnung
  • Content-Page: Definiert Inhalt und überschreibt evt. die Anordnung

Wenn du dann Global eine andere Anordnung haben möchtest, musste einfach die Masterpage ändern... außer du möchtest für verschiedene "Abteilungen" (z.B. Nachrichtensystem und Bauen-System) insgesamt was verändern. Dann macht eine Sub-Masterpage pro Abteilung durchaus Sinn.

Ich habe ein HTML Grundgerüst für das CSS Framework YAML. Das nutze ich für jedes Projekt. Aber nicht jedes Projekt belegt alle Platzhalter und hat die gleiche Anordnung von den WebControls dann.

Das eine hat zum Beispiel nur Navigation und Inhalt. Das andere bekommt noch einen Header und Footer dazu. Beide sollen das gleiche Grundgerüst haben über die gleiche übergeordnete MasterPage und mit der untergeordneten MasterPage dann unterschiedliche WebControls einbinden.

Kennt eigentlich jemand einen Anbieter für ASP.NET Webhosting?

Auf diese Diskussion antworten