2017-02-16 4 views
0

Windows 서비스에서 자체 호스팅으로 SignalR 허브를 사용합니다. 허브에 접속하는 클라이언트는 winforms입니다. 서버는 포트 80에서 실행되며 정상적으로 작동합니다.SignalR은 무작위로 포트를 수신합니까, 아니면 미리 정의 할 수 있습니까?

클라이언트가 메시지를 보내거나받는 포트가 궁금합니다.

내가 아는 한 포트는 우리가 클라이언트 컴퓨터를 떠나고 우리가 서버에 도착하는 포트가 다른 포트 일 수 있습니다. 내 클라이언트가 실행될 머신은 포트가 부족할 것이므로 (대부분의 포트는 닫힙니다.) 따라서 클라이언트가 머신을 떠나는 포트를 미리 정의해야한다고 생각합니다.

  1. 나는 이렇게 생각하고 있나?
  2. 클라이언트 측에서 항상 클라이언트 포트가 동일한 연결을 만들 수 있습니까? 여기

내 클라이언트 코드 :

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(); 
} 

참고 : 나는 그러므로 나는이 문제 여부있을 것입니다 모르겠어요,하지만, 클라이언트 환경을 시뮬레이션 할 수 아니다 고객이이 요구 사항을 지적했기 때문에 우리가 고객을 설치할 때 놀라지 않을 것입니다.

답변

1

일반 TCP/IP 통신은 무작위 (또는 적어도 고정되지 않은) 원본 포트에서 이루어집니다. 이는 clientip:sourceport-serverip:destport 콤보를 여러 개 가질 수 없기 때문에 TCP 구현은 사용 된 로컬 포트 ​​목록을 유지하고 새 연결을 설정할 때 사용되지 않는 포트를 선택합니다.

소스 포트 .NET TcpClient constructor overload을 선택할 수 있지만 해당 sourceport가 이미 사용 된 경우 응용 프로그램에 문제가 발생할 수 있습니다.

SignalR은 웹 소켓, HTTP 롱 폴링 또는 다른 전송 메커니즘을 사용할지 여부를 자동으로 감지하므로 소스 포트를 설정할 수 있다고 생각하지 않습니다.

(운송 방법 선택에 대한 다이어그램 : How does SignalR decide which transport method to be used?).

+0

그래서 자동으로 처리되므로 명시 적으로 처리 할 수 ​​없다는 뜻입니다. 그런 다음, 소수의 포트를 제외하고 모든 포트가 방화벽에서 닫히고 사용 가능한 포트 중 하나를 찾아서 선택할 수 있습니까? 아니면 무작위로 실패할까요? –

+0

@ TolgaEvcimen 방화벽 구성 방법을 잘 모르겠지만 일반적으로 방화벽은 들어오는 포트를 차단하고 덜 일반적으로 보내는 포트는 차단합니다. 이 경우 클라이언트에서 서버로 나가는 경우 –

+0

이러한 클라이언트는 예외적 인 클라이언트이므로 예 방화벽이 엄격하게 구성됩니다. –