Laden...

Kommunikation zwischen Webpage und Forms

Erstellt von schorge vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.397 Views
S
schorge Themenstarter:in
129 Beiträge seit 2014
vor 5 Jahren
Kommunikation zwischen Webpage und Forms

Moin,

ich habe eine C#-Forms Geschichte die einen lokalen Server
erstellt mittels HttpListener.
Jetzt bin ich auf der Suche nach einem Sample oder ähnliches
in dem ich Beispiele für die Kommunikation zwischen Server/Webseite Send/Request habe.

Sicherheit spielt erstmal keine Rolle da alles Lokal abläuft.


public static void StartListening()
        {
            HttpListener listener = new HttpListener();
            Stream _ouput;

            SetPrefixes(listener);

            if (listener.Prefixes.Count > 0)
            {
                listener.Start();

                while (true)
                {                    
                    HttpListenerContext context = listener.GetContext();
                    HttpListenerRequest request = context.Request;
                    HttpListenerResponse response = context.Response;


                    string tester = AppDomain.CurrentDomain.BaseDirectory + @"web\index.html";


                    string contents = File.ReadAllText(tester);                    
                    string html = contents;

                    byte[] buffer = Encoding.UTF8.GetBytes(html);

                    response.ContentLength64 = buffer.Length;
                    _ouput = response.OutputStream;
                    _ouput.Write(buffer, 0, buffer.Length);

                    //if (request.HttpMethod == "POST")
                    //{
                    //}

                    string text;
                    
                    try
                    {
                        using (var reader = new StreamReader(request.InputStream, request.ContentEncoding))
                        {
                            text = reader.ReadToEnd();
                            // Here Communicate with my Classes>Items>Events
                        }
                    }
                    catch
                    {

                    }
                }
            }
        }

        private static void SetPrefixes(HttpListener listener)
        {
            String[] prefixes = new String[] { "http://localhost:8000/" };

            int i = 0;

            foreach (string s in prefixes)
            {
                listener.Prefixes.Add(s);
                i++;
            }
        }


index.html


<html>
<header><title>This is title</title></header>
<body>
    Hello world
    <form action="/action_page.php" method="post">
        First name:<br>
        <input type="text" name="firstname" value="Mickey"><br>
        Last name:<br>
        <input type="text" name="lastname" value="Mouse"><br><br>
        <input type="submit" value="Submit">
    </form>
</body>
</html>


Die textvariable bleibt aber leider nach dem Submit leer 😦

Wo ich hin will:
Button in Forms ist ON
Button auf Webpage ist ON
beide sollen Kommunizieren

P
441 Beiträge seit 2014
vor 5 Jahren

Tip: fange gleich mit an Sicherheit in deinem Konzept zu berücksichtigen. Später geht es vielleicht nicht mehr so gut und man lässt es dann weg.

Ich sehe an deinem Code nichts, wo du versuchst die POST Daten auszuwerten. Das wird vermutlich das Problem sein.

Du würdest es dir einfacher machen, wenn du anstatt des HttpListeners eine fertige Lösung nimmst, z.B. ASP.NET Core mit Kestrel oder NancyFx.
Du solltest dabei aber immer bedenken, dass privilegierte Ports (ich meine das ist alles unter 10k) nicht durch jeden Benutzer geöffnet werden kann. Wenn es doch HtppListener sein soll bietet Windows da eine Möglichkeit das unter Port 80 zu machen, mittels "Temporary Listen Addresses":


 $"http://+:80/Temporary_Listen_Addresses/{_redirectSubPath}/";

Das funktioniert aber meine ich ausschließlich lokal.

16.807 Beiträge seit 2008
vor 5 Jahren

Sicherheit spielt erstmal keine Rolle da alles Lokal abläuft.

Standard-Irrglaube und der erste Schritt zum Leak.

An für sich auch der total falsche Ansatz.
M2M bzw. App-to-App sollte mit einem Protokoll wie Json umgesetzt werden.

HTML Parsen und Co ist extrem aufwändig und fehlerbehaftet.
Stichwort: ASP.NET Core HTTP/JSON API

S
schorge Themenstarter:in
129 Beiträge seit 2014
vor 5 Jahren

Okay, ich habe folgendes für bi-directional Optionen gefunden:

-SignalR
-WebAPI and WebSockets
-Socket IO (framework for Node.js)
-Alchemy-Websockets
-Fleck
-SocketCluster (framework for Node.js)

Ein REST API habe ich schon mal entwickelt und kann darauf aufbauen (Mit JSON)
Interessant finde ich dann die SqlDependency Class die Änderungen
an der DB die Events auslösen lässt...

16.807 Beiträge seit 2008
vor 5 Jahren

-SignalR
-WebAPI and WebSockets
-Socket IO (framework for Node.js)
-Alchemy-Websockets
-Fleck
-SocketCluster (framework for Node.js)

Wirr zusammen gemischt.

Tipp: Schau Dir das Thema nochmal an, bevor Du jetzt planlos in eine Richtung läufst und plötzlich vor der Wand stehen wirst 😉
WebSockets ist die Basis für bi-direktionale Kommunikation allgemein im Web.; es wird hierbei direkt mit TCP gearbeitet statt auf HTTP (over TCP).
SignalR baut darauf auf genauso wie SocketIO oder Fleck.

WebAPI ist hingegen kein Protokoll, sondern ein Produkt von Microsoft, das auf REST fokussiert ist.
Prinzipiell spricht man hier technologisch von einer HTTP bzw. JSON API (wobei man auch XML ausliefern kann).
SignalR hingegen ist (mittlerweile) eine Middleware; kein allein stehendes Produkt mehr.

Dein P2P Weg ist prinzipiell auch nicht unbedingt der praktikable weg hier.
Üblich bei solch einer Sache ist tatsächlich eine primäre HTTP API, von der Du den aktuellen Stand bekommst; Änderungen werden dann via Push an alle verbundenen Clients gepublished.
Ob der Client dann eine Web Page ist, eine Desktop App oder eine Mobile App spielt keine Rolle.

Prinzipiell funktioniert so ziemlich jede App mit Datenaustausch bzw. moderne Webseite.

Und in der .NET Welt gibt es dafür prinzipiell zwei Basen (von Microsoft):
ASP.NET Core mit MVC als Middleware für die REST API und SignalR für die Push-Notification.