Bearbeiten/ZusammenfassungSignalR auf Home Network
Nach viel Versuch und Irrtum, Paul Kearney - pk half mir zur Antwort führen, obwohl ich noch nicht wissen, warum dies geschieht, zumindest Ich weiß, wie man es zur Arbeit bringt.
Kurzübersicht: Clients können eine Verbindung zu Port 8080 auf meinem Laptop herstellen, wenn ich bei der Arbeit direkt mit meinem Netzwerk verbunden bin. Clients können keine Verbindung zu Port 8080 herstellen, wenn ich mich in einem Heimnetzwerk befinde. Um dies zu beheben, habe ich eine Firewall-Regel (auf meinem Laptop) erstellt, um eingehenden Datenverkehr auf 8080 zu ermöglichen. Ich würde gerne wissen, warum dies der Fall ist. Ändert der Windows-Firewalldienst meines Laptops tatsächlich seine Einstellungen basierend auf dem Netzwerk, mit dem ich verbunden bin?
Hinweis: Das alles funktioniert, wenn ich in meinem Netzwerk bei der Arbeit bin, aber es funktioniert nicht auf meinem Heim-Netzwerk arbeiten, oder Heimnetzwerk jemand anderes. Der Host-Computer (mein Laptop) ist an beiden Standorten gleich.
Ich habe eine Web-App, die SignalR verwendet. Alles funktioniert, wenn ich die Web-App auf dem gleichen Rechner wie der SignalR-Host laufe. Wenn ich versuche, von einer anderen Maschine zu verbinden, bekomme ich diesen Fehler:
> GET http://10.0.0.13:8080/signalr/hubs net::ERR_CONNECTION_TIMED_OUT. Cannot read property 'client' of undefined.
Dieser Fehler kommt von meiner Seite index.html:
<script src="http://10.0.0.13:8080/signalr/hubs"></script>
Von der Forschung, die ich getan habe, habe ich wissen, dass ich nicht localhost
in meiner SignalR URL verwenden sollte. Also habe ich ein Sternchen benutzt. Das ist in meiner selbst gehosteten SignalR App:
class Program
{
static void Main(string[] args)
{
string url = "http://*:8080";
using (WebApp.Start(url))
{
Console.WriteLine("Server running on {0}", url);
Console.ReadLine();
}
}
}
class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
public class RaceHub : Hub
{
public void Send(string name, string message)
{
Clients.All.addMessage(name, message);
}
}
Und das ist mein JavaScript zu verbinden:
var signalRUrl = 'http://10.0.0.13:8080/signalr';
$.connection.hub.url = signalRUrl;
var hub = $.connection.raceHub; // proxy reference to hub
// Create a function that the hub can call to broadcast messages.
hub.client.addMessage = function (name, message) {
receiveSignalRMessage(name, message);
};
$.connection.hub.start(); // Start the connection.
Wie ich schon sagte, das alles funktioniert lokal. Aber es funktioniert nicht von einer anderen Maschine. Ich habe die Windows-Firewall nicht aktiviert, das ist also nicht das Problem. Irgendwelche Ideen?
HTTPS hat nicht funktioniert. Es funktioniert, wenn ich in meinem Netzwerk bei der Arbeit bin, aber nicht zu Hause. Die Konfiguration ist gleich. Muss etwas mit meinem Heimnetzwerk zu tun haben.
Auch ist es das, was die Seite aussieht, wenn es richtig funktioniert:
Und das ist, was passiert, wenn es nicht funktioniert:
nicht von SignalR API verursacht, weiß ich nicht, ohne die Maschineninformationen zu sehen, aber es kann Ergebnis von IP-Versionen sein. Können Sie die IP-Versionen nachweisen? – bashkan
Was meinst du mit IP-Versionen? IPv4 und IPv6? Und was bedeutet es, sie zu beweisen? Nur dass sie alle IPv4 oder IPv6 sind? –
Ich möchte eigentlich sagen, Fehler wird nicht von SignalR verursacht, am wahrscheinlichsten von Network. Möglicherweise versuchen Sie, anstelle des Sternchens ein Pluszeichen zu setzen. – bashkan