2017-02-16 7 views
0

Ich verwende SignalR Hub als selbst gehostet auf einem Windows-Dienst. Es gibt winforms Clients, die mit dem Hub sprechen. Der Server läuft auf Port 80 und es funktioniert gut.Ist der SignalR-Empfangsport zufällig oder kann er vordefiniert sein?

Ich frage mich, auf welchem ​​Port der Client die Nachrichten sendet oder empfängt?

Soweit ich den Port kenne, verlassen wir den Client-Rechner und den Port, den wir beim Server ankommen, sind oder können unterschiedliche Ports sein. Die Maschinen, auf denen mein Client läuft, sind kurz an den Ports (die meisten Ports sind geschlossen), also denke ich, dass ich den Port, den mein Client auch verlässt, vordefinieren muss.

  1. Habe ich Recht so zu denken?
  2. Wie kann ich die Verbindung auf der Client-Seite erstellen, dass der Client-Port immer gleich ist?

Hier ist meine Kundennummer:

IHubProxy _TextCopierHub; 
HubConnection _HubConnection { get; set; } 

public TextCopierHub (string url) 
{ 
    _HubConnection = new HubConnection(url); 
    _TextCopierHub = _HubConnection.CreateHubProxy("TextCopierHub"); 
    _HubConnection.Credentials = CredentialCache.DefaultCredentials; 

    if (!_HubConnection.Start().Wait(10000)) 
     throw new TimeoutException("Hub didn't start in 10 seconds"); 

    RegisterEvents(); 
} 

Anmerkung: Ich bin nicht in der Lage, die Client-Umgebung zu simulieren, daher bin ich nicht einmal sicher, ob dies ein Problem sein wird oder nicht, aber ich Ich möchte nicht überraschen, wenn wir die Clients installieren, da der Kunde auf diese Anforderung hingewiesen hat.

Antwort

1

Regelmäßige TCP/IP-Kommunikation findet über einen zufälligen (oder zumindest nicht festen) Quellport statt. Dies liegt daran, dass Sie nicht mehrere clientip:sourceport-serverip:destport Combos haben können, so dass die TCP-Implementierung eine Liste der verwendeten lokalen Ports enthält und eine nicht verwendete verwendet, wenn eine neue Verbindung hergestellt wird.

Sie können einen Quellport .NET TcpClient constructor overload auswählen, aber Ihre Anwendung wird auf Probleme stoßen, wenn dieser Quellport bereits verwendet wird.

Da SignalR automatisch erkennt, ob WebSockets, http Long Polling oder andere Transportmechanismen zu verwenden sind, glaube ich nicht, dass Sie den Quellport dafür einstellen können.

(Diagramm zur Auswahl der Transportmethode hier: How does SignalR decide which transport method to be used?).

+0

Sie sagen also, es ist automatisch und kann nicht explizit behandelt werden. Angenommen, alle Ports sind bis auf wenige Firewalls geschlossen, wäre es in der Lage, einen dieser verfügbaren Ports zu finden und auszuwählen und zu funktionieren? Oder wird es zufällig fehlschlagen? –

+0

@TolgaEvcimen Ich bin mir nicht sicher, wie Ihre Firewall konfiguriert ist, aber normalerweise blockieren Firewalls eingehende Ports und weniger häufig ausgehende Ports. In diesem Fall ausgehend von Ihrem Client auf den Server –

+0

Diese Clients sind außergewöhnliche Clients, also ja Firewalls sind streng konfiguriert. –

Verwandte Themen