Laden...

SignalR Server: Zugriff mit Javascript Client nur vom Entwicklungsrechner aus

Erstellt von schuppsl vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.181 Views
S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 4 Jahren
SignalR Server: Zugriff mit Javascript Client nur vom Entwicklungsrechner aus

Hallo zusammen,

wieder einmal stoße ich an die Grenzen von...keine Ahnung...mir selbst wahrscheinlich.
Auf einem Windows Server 2012 läuft per Windows Dienst ein SignalR Server.

Alles soweit wunderbar.

Auf der Clientseite habe ich einen Javascript Client der gleich nach dem Verbinden eine kurze "Hello from ...Client" Nachricht schickt.
Dies ist dann in der Entwicklerkonsole im Browser sichtbar.

Aber dies nur auf meinem Entwicklungsrechner.
Von jedem anderen Rechner aus geht es nicht.

Den aktuellen Dienst habe ich einem vorhandenen Dienst nachgebaut, der seit Jahren stabil läuft.

Der Dienst soll später Daten aus einer Datenbank zum Webbrowser schicken.

Ich kann weder auf der Server- noch auf der Clientseite einen Fehler entdecken.
Aber vielleicht stimmt ja mein Javascript Client nicht?
Es handelt sich um einen SignalR Server auf .Net 4.7.

Hier der Javascript Client:


 <script src="Scripts/jquery-3.4.1.js"></script>
    <script src="lib/signalr.js/jquery.signalR-2.4.1.js"></script>


    <script type="text/javascript" src="http://custom01.mein-server.de:8084/signalr/hubs"></script>

    <script type="text/javascript">
        $(function () {

             $.connection.hub.url = 'http://custom01.mein-server.de:8084/signalr';
           

            var stocks = $.connection.myHub;

            $.connection.hub.start().done(function () {


                stocks.server.sendTestMessage("Connected - Client Front");

                 $("#status").addClass("bg-success");

            }).fail(
  function(err) {
        console.error(err.toString());
        $("#status").addClass("bg-danger");
    }
);

            stocks.client.sendMessage = function (data) {
                console.log("data: " + data);
            };

Debugge ich im Browser das Script, kann ich erkennen, dass alle Scripte gefunden werden und der Hub auch erstellt wird.
Er springt also in den .done Bereich, ohne wirklich eine Verbindung zum SignalR Server herzustellen!
Das sehe ich im Debugger auf Server Seite

Das funktioniert nicht einmal direkt auf dem Server auf dem der SignalR Server läuft, sondern ausschließlich nur auf meinem Entwicklungsrechner.
Es ist auf dem SignalR Server keine Einschränkung oder ähnliches speziell auf meinen Rechner eingestellt!

Es kommen im Browser auch keinerlei Fehler (CORS o.ä.).

Die Webseite, die aufgerufen wird und den Javascript Client erstellt, liegt auf demselben Server wie der SignalR Server:
http://custom01.mein-server.de/view/front.html

Kann hier jemand einen Fehler entdecken?
Vielen herzlichen Dank im Voraus.

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 4 Jahren
Lösung

Also ich habe mal das Clientseitige debugging eingeschalten:


  $.connection.hub.logging = true;

Darauf sehe ich im Browser den Fehler:> Fehlermeldung:

SignalR: No hubs have been subscribed to. The client will not receive data from hubs. To fix, declare at least one client side function prior to connection start for each hub you wish to subscribe to.

Nach diesem Fehler kann man schon mal besser googeln und ich bin dann auf diese Lösung gestoßen:
https://stackoverflow.com/questions/16248091/fail-to-initiate-connection-in-signal-r-in-asp-net

Sprich, irgendeine Funktion vor $.connection.hub.start().done bereitstellen, dann funzt das:


stocks.client.irgendwas = function() {};

Warum weiß ich nicht, aber so geht es.

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 4 Jahren

Nachtrag:

Die SignalR Funktionen müssen aus dem jquery.Ready() Block raus:

 $(function () {...});

Also außerhalb diesem sein.
Dann kann man auch meine o.G. Lösung weglassen.

Vor lauter Bäumen den Wald nicht gesehen.
Vielleicht hilft es ja irgendwann mal jemand.