Wie realisiere ich in .NET einen Webserver?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 40 Antworten in diesem Thema. Der letzte Beitrag () ist von Thisoft.

    Wie realisiere ich in .NET einen Webserver?

    Hallo zusammen,

    ich möchte sozusagen eine Client/Server-Anwendung realisieren. Also der Client (eine Website mit Javascript) soll von meinem Hauptprogramm (.NET) Daten abrufen können. Ich hatte bevorzugt an einen HTTPRequest gedacht, REST-API würde ich aber genauso nehmen. Ich bin nur gerade ewas "konfusioniert" was denn da nun so "der" gängige Weg ist ?( Könnt ihr mich mal in die richtige Richtung schubsen?
    Der "gängige" Web ist eine WebAPI aufzusetzen welche auf einem Webserver läuft. Mittels Asp.Net Core ist es auchnicht mehr notwendig das es sich hierbei um einen windows Server (IIS) handeln muss. Das kann nun auch auf Linux laufen.

    Ein weiterer Weg und der vermutlich modernere das es sich hierbei um eine Microservicearchitektur handeln würde wäre das über Azure Functions zu machen. Als Datenhaltung kann hier dann Beispielsweise CosmosDb zum einsatz kommen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hmm, ja -schon alles richtig mit Webserver und so. Aber, ich habe ja bereits meine "Serveranwendung" die die Kommunikation zwischen diversen Gerätschaften per Modbus, Euromap u.a. regelt und auch die Datenhaltung in einer SQL-Server-Db übernimmt. Ich möchte jetzt nur mal paar Daten, Zustände etc. davon auf einer Website visualisieren. Muss ich dafür wirklich noch einen zusätzlichen Webserver aufsetzen?
    Ich hab ja bereits mal mit der hier im Forum verlinkten Library von Quadsoft experimentiert. Könnte auch das sein was ich brauche - wenn da nicht ein Zugriffsproblem wäre:

    Quellcode

    1. Quellübergreifende (Cross-Origin) Anfrage blockiert: Die Gleiche-Quelle-Regel verbietet das Lesen der externen Ressource auf http://xxx.xxx.xxx.xxx:60000/. (Grund: CORS-Kopfzeile 'Access-Control-Allow-Origin' fehlt)

    Ich vermute, da die Lib schon etwas älter ist, dass die aktuellen Browser da einen Sicherheitsriegel vorschieben?

    Thisoft schrieb:

    Aber, ich habe ja bereits meine "Serveranwendung" die die Kommunikation zwischen diversen Gerätschaften per Modbus

    haste ja alles nicht geschrieben...

    Thisoft schrieb:

    Meine Serveranwendung ist ein Windows-Forms-Projekt auf .NET Framework.

    Ne, ist es nicht. Hostanwendung. Mit Server hat das nix zu tun. Bitte unscheide diese Dinge.

    du benötigst einen Webdienst. Wie ist im grunde egal. Ob dieser ein XML oder ein JSON zurückgibt auch. Wen du einen Server mit einer SQL Datenbank hast kannst du dort einen Dienst einrichten. Wie und mit welcher Technologie bleibt dir überlassen, wir können dir nur Beispiele aufzählen, und da du dich im .Net Bereich bewegst kann ich dir nur ASP.Net Core empfehlen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    und da du dich im .Net Bereich bewegst kann ich dir nur ASP.Net Core empfehlen.

    Gut - ist ein Vorschlag. Nur tappe ich da völlig im Dunkeln, mit welchen Methoden ich das konkret machen müsste und, vor allem wie ich das mit Javascript abfrage ?( Sorry, aber in Webprogrammierung und Client/Server hab ich eben bisher noch nahezu gar nix gemacht...
    Für eine ASP.Net Core Anwendung bietet VS ein Template, also ich sag mal ohne Vorkenntnisse ist das 10 Minuten startklar.
    Gibt sooooo viele Tuts im Netz. Probiers einfach und wenn du hängst melde dich hier am besten mit dem genaueren Problem.

    Bez. abfrage z.b. so: stackoverflow.com/questions/17…nly-javascript-and-jquery

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Jup, kann mich da @Nofear23m nur anschließen, eine REST-API mit ASP.NET-Core aufzusetzen ist super einfach und bei weitem besser als jetzt noch was an deine bestehende Anwendung anzuflanschen. Das ding läuft standardmäßig als Konsole, lässt sich aber auch super einfach via IIS hosten, oder als Windows Dienst betreiben (letzteres ist sogar nur ein Nuget-Paket, und eine Zeile code mehr)
    Hat ne Weile gedauert. Hatte jetzt endlich mal etwas Zeit mich damit zu beschäftigen und versuche gerade dieses Tut docs.microsoft.com/de-de/aspne…re-3.1&tabs=visual-studio abzuarbeiten.

    Dabei scheitere ich gerade an folgendem Fehler

    Quellcode

    1. public void ConfigureServices(IServiceCollection services)
    2. {
    3. services.AddDbContext<TodoContext>(opt =>
    4. opt.UseInMemoryDatabase("TodoList"));
    5. services.AddControllers();
    6. }


    Die FEhlermeldung ist:

    Quellcode

    1. Fehler CS1061 "DbContextOptionsBuilder" enthält keine Definition für "UseInMemoryDatabase", und es konnte keine zugängliche UseInMemoryDatabase-Erweiterungsmethode gefunden werden, die ein erstes Argument vom Typ "DbContextOptionsBuilder" akzeptiert (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis).


    Dabei bin ich der Meinung mich strikt an das Tut gehalten zu haben... Der Fehler sagt ja dass ein VErweis fehlen könnte, hab's aber nochmal mit dem Tut verglichen... Könnt ihr mir ne kleine Hilfestellung geben?
    Dank eurer Hilfe läuft mein "Beispielserver" erstmal. :) Jetzt bin ich allerdings bei der nächsten Frage angekommen: Wo kann ich denn den lt. Tut "zufällig gewählten" Port auf einen festen einrichten? Ich stell mich wahrscheinlich nur 'n bissel an gerade, aber ich finde die Ecke leider nicht wo der definiert wird...
    Warum nimmst Du nicht einfach "Blazor"?
    dotnet.microsoft.com/apps/aspnet/web-apps/blazor
    Da ist im template schon ein Beispiel dabei wie daten z. B. von einer Datenbank angezeigt werden. Man muss eigentlich "nur" noch die Verbindung aufbauen.

    Der rest ist bisschen HTML und C#. Fertig
    Der Beitrag wurde aus 100% wiederverwendbaren Elektronen erstellt!

    wolfi_bayern schrieb:

    Warum nimmst Du nicht einfach "Blazor"?
    dotnet.microsoft.com/apps/aspnet/web-apps/blazor
    Da ist im template schon ein Beispiel dabei wie daten z. B. von einer Datenbank angezeigt werden. Man muss eigentlich "nur" noch die Verbindung aufbauen.

    Der rest ist bisschen HTML und C#. Fertig


    Weil ich "Blazor" schon vor längerer Zeit mal probiert hatte und mich damit noch weniger anfreunden kann als jetzt mit ASP.NET und weil mein Problem eben nicht der Datenbankzugriff sondern eben "das bisschen HTML und C#" ist. Mit dem ganzen Webgedöns hab ich mich bisher nicht groß abgegeben...

    Ich brauch doch einfach nur ein Dingens was im Intranet von einer Anwendung Daten gesendet bekommt und die sozusagen auf Anfrage wieder an andere raussendet... weiter nix...:-(
    In dem Fall, dass du nicht IISExpress benutzt, sondern die App sich selbst startet (self hosted ASP.NET Core)

    C#-Quellcode

    1. public static IHostBuilder CreateHostBuilder(string[] args) =>
    2. Host.CreateDefaultBuilder(args)
    3. .ConfigureWebHostDefaults(webBuilder =>
    4. {
    5. webBuilder.UseStartup<Startup>()
    6. .UseUrls("http://*:5001", "https://*:5002");
    7. });

    Es geht hier hauptsächlich um den Punkt .UseUrls() der Kestrel vorgibt, auf dem Port 5001 für http und 5002 für https zu lauschen.

    Als nächstes, um dir das Debuggen etwas zu erleichtern, gehst du in die launchSettings.json und stellst im Bereich der den Namen deiner Anwendung hat, die Variable applicationUrl so um:
    "applicationUrl": "https://localhost:5002;http://localhost:5001" dadurch wird der Browser nach dem Start der Anwendung automatisch auf einer dieser Adressen geöffnet.


    Im Falle dass du IISExpress benutzt, bleibt die programm.cs unverändert (kein .UseUrls()) gehst aber ebenfalls in die launchSettings.json und änderst im Bereich iisExpress die Variable applicationUrl auf "http://localhost:5001" und die Variable sslPort auf einen Wert zwischen 44300-44399 was wohl leider fest vorgegeben ist.


    Die Frage ist natürlich, wie du später vor hast die Anwendung zu verteilen. Ist es, wie ich bereits angepsrochen hatte, eine selbstgehostete ASP.NET Core Anwendnung die entweder als Konsole, oder als Windows Dienst läuft, oder willst du diese via IIS hosten?