Frage

Ich möchte eine Client-Server-Anwendung in .NET geschrieben haben, die folgt:

  • Der Server leitet Linux aus
  • Auf dem Server befindet sich die SQL -Datenbank (MySQL), die Dokument -URLs enthält

Was wir wollen: - Serverseite würde regelmäßig alle URLs kriechen und einen Volltextindex für sie erstellen - Client -Seite könnte eine Abfrage mit GUI in diesen Index ausführen

Die Client -Anwendung wird mit C#in .NET geschrieben. Neben der Suche in Dokumenten kann es viele andere Dinge tun, die hier nicht beschrieben werden und die kundenseitig sehr gut gemacht werden.

Wir möchten C# auch für die Serverseite verwenden, aber wir haben keine Erfahrung in diesem Bereich. Wie werden solche Dinge normalerweise getan?


Klärung der Frage jetzt basierend auf einigen Antworten:

Das, was mir am unklaresten ist, ist, wie die Kunden-Server-Kommunikation normalerweise behandelt wird. Verwenden Client und Server normalerweise Sockets und kümmern sich um Details wie IP -Adressen, Ports oder NAT -Durchläufe? Oder gibt es einige gängige Frameworks und Muster, die dies transparent machen und das Aufruf von Client-Server-Nachrichten oder -verfahren einfach machen würden? Irgendwelche Beispiele oder guten Ausgangspunkte dafür? Gibt es einige gängige Techniken, wie ein einzelner Server gleichzeitig mit mehreren Clients mit der Server erforderlich ist?

War es hilfreich?

Lösung

Um C# unter Linux zu verwenden, müssen Sie verwenden Mono. Dies ist eine Open -Source -Implementierung der CLR -Spezifikation.

Als nächstes müssen Sie entscheiden, wie Sie zwischen Server und Client kommunizieren, von der niedrigsten Ebene des gerade Öffnungsbereichs eines TCP/IP -Sockets und dem Senden von Bits auf und ab bis zu .NET -Remoting bis hin zu WCF, um Webservices auf dem Server zu enthüllen. Ich weiß nicht, wie kompliziert die WCF -Implementierung auf Mono ist. Ich denke, Sie haben möglicherweise ein Problem mit der binären Remote zwischen Mono und MS .NET.

Ich würde vorschlagen, dass Webservices im RPC -Stil eine sehr gute Lösung bieten. Webservices haben auch den Vorteil, dass Clients von anderen Plattformen problemlos hergestellt werden.

BEARBEITENAls Antwort auf die Klärung der Frage. Ich würde empfehlen, Mono/ASP.NET/Webservices auf dem Server zu verwenden, wenn Sie C# sowohl auf Server als auch auf dem Client verwenden möchten.

Eine Annahme, die ich gemacht habe, ist, dass Sie ein Client -Pull -Modell durchführen können, bei dem jede Nachricht vom Client initiiert wird. Die Verwendung eines anderen Ansatzes kann es dem Server ermöglichen, Ereignisse in den Client zu bringen. Angesichts des Clients hat ich die Möglichkeit, den Server regelmäßig zu stolpern. Ich betrachte nicht so viel zurück, aber er kann von der Art der Anwendung abhängen, die Sie entwickeln.

MONO Ermöglichen Sie die Ausführung von C# (kompiliert mit IL) auf einer Linux -Box. Mit Mono ASP.NET können Sie das Standard -ASP.NET verwenden und in Apache siehe http://www.mono-project.com/asp.net Und schließlich ermöglichen Sie Webservices, dass Sie robust in stark getippte Weise zwischen Ihrem Client und Ihrem Server kommunizieren.

Die Verwendung dieses Ansatzes negiert die meisten in Ihrer Klärung aufgeworfenen Probleme und macht sie zum Problem eines anderen.
Sockets/SSL - wird durch Standard -NET -Laufzeit auf dem Client und Apache auf dem Server erledigt.
IPadress/ports/nat traversal - wird alle erledigt. DNS -Look up wird die Server IP erhält. Open Socket ermöglicht es dem Server, über jede Firewall- und NAT -Setup zu reagieren.
Mehrere Clients - Apache ist so erstellt, dass mehrere Clients gleichzeitig wie ASP.NET verarbeitet werden, sodass Sie dort keine Probleme haben sollten.

Andere Tipps

Wie viele bereits erwähnt haben, gibt es eine Reihe von Dingen, die Sie erwähnt haben, die Sie Schmerzen verursachen. Ich werde nicht auf diese eingehen, stattdessen werde ich Ihre ursprüngliche Frage zur Kommunikation beantworten.

Die derzeitige Wahl in dieser Art von Kommunikation sind Webdienste. Mit diesen können Sie Remote -Anrufe mit dem HTTP -Protokoll tätigen und die Anforderungen und Antworten in XML codieren. Während diese Methode ihre Kritiker hat, habe ich es unglaublich einfach gefunden, in Betrieb zu nehmen, und funktioniert für fast alle Anwendungen gut.

Das .NET -Framework hat Unterstützung für Webdienste aufgebaut, die definitiv von Ihrem Kunden aufgerufen werden können. Ein kurzer Blick auf die Mono -Website zeigt an, dass sie auch die Webdienste unterstützt. Daher sollte das Schreiben Ihres Servers in C# und das Ausführen unter Mono in Ordnung sein. Googeln für "C# Web Service Tutorial" zeigt viele Websites, die Informationen zum Einstieg finden. Hier finden Sie eine zufällige Wahl aus diesen Ergebnissen:

http://www.codeguru.com/csharp/csharp/cs_webservices/tutorials/article.php/c5477

sich ansehen Heuschrecke: "Mit Grasshopper können Sie Ihre bevorzugte Entwicklungsumgebung von Microsoft® verwenden, um Anwendungen auf JAVA-fähigen Plattformen wie Linux bereitzustellen."

Oder sehen hier

Die Idea besteht darin, Ihre App in Java umzuwandeln und dann auf Tomcat oder JBoss auszuführen.

Ein anderer Ansatz: Verwenden Sie das Modul mod_aspdotnet für Apache, wie beschrieben hier.

Dies Grundlegende Client/Server -Chat -Anwendung in C# Sieht aus wie ein Beispiel, das für mich ein Ausgangspunkt sein könnte. Relevante .NET -Klassen sind Tcpclient und Tcplistener

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top