어떤 포트 번호 .NET 리모 팅이 할당하는지 어떻게 찾습니까?
문제
Port Zero IE를 사용하여 TCPCHANNED를 작성하여 .NET 리모 팅이 사용 가능한 포트를 할당하도록 허용하는 경우 어쨌든 할당 된 포트 번호를 결정할 수 있습니까?
채널을 만들 때 포트 번호를 지정할 수 있다는 것을 알고 있지만 동일한 Citrix 서버에서 여러 인스턴스를 실행하고 싶지 않기 때문에이 작업을 수행하고 싶지 않습니다. 각 인스턴스는 다른 포트에서 듣습니다.
이상적으로 나는 많은 포트를 예약하는 데 어려움을 겪고 어떤 포트가 할당되었는지 추적하는 데 어려움을 겪고 싶지 않습니다. 포트에 자동으로 할당되도록하고 싶습니다. 그러나 어떤 포트 번호가 할당되었는지 알 수 있어야합니다.
해결책 2
내 해결책은 다음과 같습니다.
다음 코드를 사용하여 클라이언트 응용 프로그램의 각 인스턴스에 대해 사용하지 않은 포트를 식별하십시오.
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 0); using (Socket socket = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) { socket.Bind(endPoint); IPEndPoint local = (IPEndPoint)socket.LocalEndPoint; return local.Port; }
사용하지 않은 포트 번호를 클라이언트 응용 프로그램에 저장하십시오.
TCPCHANNEL을 설정하고 Activator.getObject를 호출 할 때 사용할 명령 줄 매개 변수를 통해 저장된 포트 번호를 호스트 응용 프로그램에 전달하십시오.
전달 된 URL의 클라이언트 애플리케이션에 저장된 포트 번호를 활성화기에 사용하십시오. getObject.
다른 팁
나는 이것에 대해 많이 알지 못하지만 MSDN에서 탐색하는 것은 Post Zero Usage Return이 TcpServerChannel
, a TcpServerChannel
a GetChannelUri()
방법; 여기에는 포트 번호가 포함됩니까? (구문 분석해야 할 수도 있습니다 new Uri(s).Port
).
다시 한번, 완전한 추측 작업. 그렇지 않다면, 그냥 말하십시오; -p
AAKASHM에 의해 편집 할 수 있습니다 이것은 올바른 접근법입니다. 수행원
var channel = new TcpChannel(0);
포함 된 서버 채널의 동적으로 할당 된 게시물은 다음과 같이 검색 할 수 있습니다.
var channelData = (ChannelDataStore)channel.ChannelData;
var port = new System.Uri(channelData.ChannelUris[0]).Port;
추악한 캐스트가 필요합니다 TcpChannel.ChannelData
속성은 다음과 같이 입력됩니다 object
...