Um sicherzustellen, dass ich als serverseitiger Entwickler alles unter Kontrolle habe, wurde die erste Version des Servers mit der System.Net.Sockets.Socket-Klasse geschrieben, wie in dem Artikel von Microsoft beschrieben . Da Sockets (im Prinzip wie alle anderen weiter von Microsoft aufgeführten Technologien mit Ausnahme von WCF) mit Begin / End-Methoden funktionieren, wurde ein kleiner Wrapper geschrieben, der die Möglichkeit bietet, mit dem ereignisbasierten Modell zu arbeiten. Dies war der erste Schritt, der Client und der Server funktionierten einwandfrei.
Da wir sehr bald SSL benötigten, mussten wir auf eine höhere Ebene des OSI-Modells wechseln und die Serverseite mithilfe der System.Net.Sockets.TcpListener-Klasse neu schreiben, mit der SSL verschraubt wurde. Dies waren die Schritte zweieinhalb, der Client und der Server funktionierten einwandfrei, der Client musste nicht einmal neu geschrieben werden - das Abfangen von Paketen zeigte, dass alles in Ordnung war, nichts hatte sich geändert.
Später wollte ich ein vollwertiges HTTPS mit all seinen Schnickschnack, für das der Server erneut geschrieben wurde - jetzt mit der System.Net.HttpListener-Klasse. Dies sind die Schritte drei und dreieinhalb, und wieder funktioniert alles gut, und wieder muss der Client nicht erneut erstellt werden. Aus Gründen der Fairness sollte beachtet werden, dass es neben dem benutzerdefinierten mobilen Client auch einen Test-C # -Client und eine Reihe von Tests gab - diese mussten jedoch umsonst neu geschrieben werden.
Der vierte Schritt kam, als wir begannen, unser System in alle Richtungen zu skalieren, und unsere eigenen Wrapper wurden zum Engpass des Projekts. Dann las ich über WCF und schrieb an einem Abend (na ja, fast) die gesamte Interaktion neu. Auf der Clientseite (und in den weitergeleiteten Paketen) bleibt alles beim Alten, aber der serverseitige Code wurde von einem halben Dutzend seriöser Klassen auf nur wenige Zeilen reduziert.
Diese Geschichte hat zwei Moralvorstellungen.
- (offensichtlich) Fahrräder zu erfinden ist schlecht. Wenn ich sofort zu Google gehen würde und keine Angst hätte, eine neue Technologie für mich zu verwenden, könnte ich die Serverentwicklung um etwa ein Drittel reduzieren.
- (und das ist die Hauptsache) Die Aufgabe, denselben Mechanismus mit verschiedenen Werkzeugen zu implementieren, ist die beste Art zu lernen, um ein tiefes Verständnis des Themas zu erlangen. Wenn Sie nur ein paar Mal etwas tun, erinnern Sie sich daran. Wenn Sie jedoch gleichzeitig die verwendeten Werkzeuge jedes Mal komplizieren (ändern), wird die Fertigkeit viel besser geschärft.