2 Stimmen

WCF Service-Host im Webdienst

Ich wurde mit einem Schulprojekt beauftragt, ein verteiltes System für ein Kino zu erstellen. Die Anforderungen sind ziemlich einfach: ein funktionierendes Modell eines Kino-Buchungssystems (also benötige ich Filme, Räume, Vorstellungen, Buchungen und eine Klasse zur Speicherung von persönlichen Informationen), einen Webdienst, der es ausführt, eine Web-Benutzeroberfläche und einen Desktop-Client zur Verwaltung.

Ich habe eine flexible Lösung gewählt, indem ich eine gemeinsame Bibliothek erstellt habe, die Definitionen für die gemeinsamen Objekte enthält, sowie eine separate Server- und Client-Implementierung (ServerReference und ClientReference). Es wurde so geschrieben, dass es einfach durch Referenzierung der Bibliothek und Erstellung einer Instanz des spezifischen Verweises verwendet werden kann (dann die Start() und Stop() Methoden verwenden).

Ich verwende WCF für die Kommunikation, das in die Controller-Schicht integriert ist, und Entity Framework für die Datenspeicherung. Da ich einen dynamischen Dienst haben wollte, musste ich die Standard-WCF-Konfiguration für Client und Server aufgeben und stattdessen die Endpunkte und Bindungen programmgesteuert erstellen.

Das Problem entstand, als ich versuchte, einen einfachen Web Service zu erstellen, der den ServerReference ausführen kann. Da ich während der Entwicklung eine desktop-ähnliche Umgebung im Sinn hatte, habe ich es so aufgebaut, nur um dann festzustellen, dass die Lösung einfach nicht mit einem Webdienst funktionieren wird.


Jetzt ist mein Problem folgendes: Die gemeinsame Bibliothek basiert auf Version 4.5, aber diese Version hat die Möglichkeit des Webdienstes verworfen. Ich möchte keinen weiteren WCF-Dienst schreiben, um die von mir erstellten Dienste zu hosten, es muss strikt lokal sein (im Grunde genommen möchte ich eine Steuerungswebsite und einen Webdienst, der eine Instanz von ServerReference erstellen kann und auf Anfrage die Start()- oder Stop()-Ereignisse auslösen kann). Da Web Service nur für 3.5 verfügbar ist, kann ich die gemeinsame Bibliothek nicht verwenden (und da die gemeinsame Bibliothek stark von der 4.5 Entity Framework-Version 6.0.1 abhängt, kann ich das auch nicht ändern).

Meine Frage ist: Wie sollte man einen solchen Dienst am besten erstellen? Sollte ich wirklich einfach einen WCF-Dienst erstellen, der den ServerReference ausführt, oder gibt es eine bessere Methode?

(Nur zur Anmerkung: Das Ziel dieses Projekts ist es, zu zeigen, was wir während dieses Semesters im Hinblick auf Webdienste, Webdesign, parallele Programmierung, reguläre Ausdrücke usw. gelernt haben.)

0voto

Thorsten Dittmar Punkte 54284

Es klingt für mich nach einem grundlegenden Missverständnis darüber, welche Technologie wann verwendet werden soll.

  1. Ein ASP.NET-Projekt ist etwas, das im eigentlichen Sinne des Wortes nicht läuft. IIS ruft bestimmten Code auf/liefert die Ergebnisse, aber es gibt nichts, das so läuft wie bei einer Desktop-Anwendung => Du kannst keinen WCF-Dienst innerhalb einer ASP.NET-Seite hosten.
  2. WCF kann auch verwendet werden, um einen Webdienst zu erstellen, aber das ist egal, da die ASP.NET-Seite über jeden Kanal mit Ihrem WCF-Dienst kommunizieren kann.
  3. Sie können einen WCF-Dienst entweder eigenständig (zum Beispiel als Windows-Dienst) oder innerhalb von IIS hosten. Es ist dem Client wirklich egal, auf welche Weise Sie es tun.
  4. Ein ASP.NET-Projekt ist kein Webdienst!

Also was Sie tun würden, ist:

  1. Erstellen Sie den WCF-Dienst, der alle Operationen durchführt, die Sie benötigen, einschließlich Lesen und Schreiben von Daten aus/in die Datenbank
  2. Hosten Sie diesen WCF-Dienst entweder eigenständig oder innerhalb von IIS
  3. Erstellen Sie Ihr ASP.NET-Projekt mit Seiten zur Verwaltung von Filmen, Räumen usw. Um Daten zu ändern oder abzurufen, kommunizieren Sie mit dem WCF-Dienst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X