Modifica/RiepilogoSignalR su Home Network
Dopo un sacco di tentativi ed errori, Paul Kearney - pk mi ha aiutato a portare la risposta, anche se ancora non so il motivo per cui questo accade, almeno So come farlo funzionare.
Sommario rapido: i client possono connettersi alla porta 8080 sul mio laptop quando sono collegato direttamente alla mia rete al lavoro. I client non possono connettersi alla porta 8080 quando sono su una rete domestica. Per risolvere questo problema, ho creato una regola del firewall (sul mio laptop) per consentire il traffico in entrata su 8080. Mi piacerebbe davvero sapere perché questo è il caso. Il servizio Windows Firewall del mio portatile modifica effettivamente le sue impostazioni in base alla rete a cui sono connesso?
Nota: Questo tutte le opere quando sono sulla mia rete al lavoro, ma non funziona sulla mia rete domestica, o di qualcun altro rete domestica. Il computer host (il mio laptop) è lo stesso in entrambe le posizioni.
Ho un'app Web che utilizza SignalR. Tutto funziona quando eseguo l'app Web sullo stesso computer su cui è in esecuzione l'host SignalR. Quando provo a collegarmi da una macchina diversa, ottengo questo errore:
> GET http://10.0.0.13:8080/signalr/hubs net::ERR_CONNECTION_TIMED_OUT. Cannot read property 'client' of undefined.
Tale errore viene dalla mia pagina index.html:
<script src="http://10.0.0.13:8080/signalr/hubs"></script>
Dalla ricerca che ho fatto, ho so che non dovrei usare localhost
nel mio URL SignalR. Quindi ho usato un asterisco. Questo è a mio self-hosted 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);
}
}
E questo è il mio JavaScript per collegare:
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.
Come ho detto, tutto questo funziona a livello locale. Ma non funziona da un'altra macchina. Windows Firewall non è abilitato, quindi non è questo il problema. Qualche idea?
HTTPS non ha funzionato. Funziona quando sono sulla mia rete al lavoro, ma non a casa. La configurazione è la stessa. Deve avere qualcosa a che fare con la mia rete domestica.
Inoltre, questo è ciò che la pagina si presenta come quando funziona correttamente:
E questo è ciò che accade quando non funziona:
non causato dall'API SignalR, non so senza aver visto le informazioni della macchina ma può essere il risultato di versioni IP. puoi provare le versioni IP? – bashkan
Cosa intendi per versioni IP? IPv4 e IPv6? E cosa significa dimostrarli? Solo che sono tutti IPv4 o IPv6? –
In realtà voglio dire che l'errore non è causato da SignalR, molto probabilmente dalla rete. Potrebbe essere provare a segno più invece di asterisco. – bashkan