2009-05-08 5 views
9

리모컨 클라이언트 및 원격 클라이언트 역할을하는 특정 응용 프로그램 (Windows 서비스)을 원합니다. 프로덕션에서는 .NET Remoting을 통해 서로 모니터링하는 두 개의 응용 프로그램 인스턴스를 실행하고 이에 따라 실패를보고합니다.'tcp'채널이 이미 등록되었습니다.

나는 기본 조각을 썼고 "채널 'tcp'가 이미 등록되었습니다."예외적으로 채널 구성을 프로그래밍 방식으로 설정하고 싶습니다.

답변

7

특정 포트 번호가있는 채널은 하나의 응용 프로그램 인스턴스에서만 만들 수 있습니다. 각 인스턴스마다 다른 포트 번호와 채널 이름을 사용해야합니다.

이렇게하려면 별도의 채널 템플릿을 사용해야합니다 (템플릿을 사용하는 경우?).

+0

포트가 di fferent .. –

+0

@Khurram Aziz - 각 인스턴스는 여러 포트를 열지 만 각 인스턴스는 여러 포트를 열지 만 다른 포트는 열지 않습니다. – stevehipwell

+0

@Khurram Aziz - 두 채널 모두 다른 이름을 사용 했습니까? – stevehipwell

2

AppDomain에 한 번만 동일한 포트 번호로 같은 채널을 만들 수 있습니다. 그게 잘못된거야?

+0

것 같다 ... 서비스 1가 "의 VitalSigns는"서버가 포트 9001에서 수신 대기하고 서비스 2 포트 9002에서 수신 대기 "의 VitalSigns"서버 서비스 1은 서비스 2의 생체 신호를 확인하고 서비스 2의 확인합니다을 가지고있다 Service1 하나의 인스턴스에서 서버를 실행하지 않고 다른 서버가 제대로 작동하는지 확인하지 않으면 각 서버/클라이언트가 필요합니다. –

12

채널 이름을 지정하지 않으면 코드는 기본적으로 "tcp"를 사용하며 모든 채널은 고유 한 이름을 가져야합니다. 이렇게 열면 각 채널에 대해 고유 한 이름을 지정하십시오.

int tcpPort = 52131; 
    // ------------------------------------------------------------ 
    BinaryServerFormatterSinkProvider serverProv = 
     new BinaryServerFormatterSinkProvider(); 
    serverProv.TypeFilterLevel = TypeFilterLevel.Full; 
    RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off; 

    serverProv.TypeFilterLevel = TypeFilterLevel.Full; 
    IDictionary propBag = new Hashtable(); 
    // ----------------------------------------- 
    bool isSecure = [true/false]; 
    propBag["port"] = tcpPort ; 
    propBag["typeFilterLevel"] = TypeFilterLevel.Full; 
    propBag["name"] = "UniqueChannelName"; // here enter unique channel name 
    if (isSecure) // if you want remoting comm to be secure and encrypted 
    { 
     propBag["secure"] = isSecure; 
     propBag["impersonate"] = false; // change to true to do impersonation 
    } 
    // ----------------------------------------- 
    tcpChan = new TcpChannel(
     propBag, null, serverProv); 
    ChannelServices.RegisterChannel(tcpChan, isSecure); 
    // -------------------------------------------- 

    string uRI = MyUniversalResourceIndicatorName; 
    // --------------------------------------------- 

    RemotingConfiguration.RegisterWellKnownServiceType(
     typeof(ImportServiceManager), uRI , 
     WellKnownObjectMode.SingleCall); 
+1

"int tcpPort = 82131;" WTF. 82131, 65535? – Behrooz

관련 문제