2011-04-28 4 views
6

.NET Remoting에 두 개의 TcpChannels를 등록했다고 가정합니다.Activator.GetObject에서 특정 채널 선택

은 그럼 사용할 채널을 선택하기 위해 URL을 tcp://...

을 것이 가능하여 Activator.GetObject를 사용하여 프록시를 얻으려고?

미리 감사드립니다.

+0

참고 : WCF를 사용하는 Remoting은 더 이상 사용되지 않습니다. – Amy

+0

@Inuyasha : 예, 그렇지만 여전히 일부는 불리한 입장입니다. 그물 :-( –

답변

5

해결 되었습니까?

지난 주에 똑같은 문제가있었습니다. (nunit의 약간의 공표되지 않은 부작용은 유닛 테스트 (내 문제)를 실행하기 위해 dll을로드 할 때 기본 "tcp"채널을 시작한다는 것입니다 ... 그런 다음 사용자 정의 싱크가있는 사용자 정의 TcpClientChannel 인스턴스를 작성하여 하나는 영구적으로 다음 다른를 오버라이드 (override) 할 경우

  1. 단순히 "우선 순위를 통과 : 나는 서버 개체)

    3 개 솔루션이 있습니다 인스턴스를 생성 할 때 서버 소프트웨어 ... 그리고 우리의 싱크는 발사되지 않았다 "속성을 TcpClientChannel의 IDictionary 생성자에 추가합니다. 기본값이 1로 설정되어 있지 않으므로 기본 "tcp"채널 등록을 덮어 쓰려면 1보다 높게 설정하십시오. NB "name"속성도 설정해야하지만 string 일 수 있습니다 (필요한 경우

  2. 채널을 등록 할 때 이름을 지정한 다음 "사용"구문을 호출하는 멋진 IDisposable 래퍼를 작성하십시오.이 코드는 ChannelServices.Unregister (...)를 호출하여 Activator.GetObject (...) 호출시 활성화하지 않으려는 채널. 그런 다음 "사용"블록이 끝날 때 (즉, Dispose()를 호출 할 때 등록 해제 한 채널을 다시로드하십시오 ... 응용 프로그램 내에서 다중 스레드 된 경우 공통 객체 참조에서 "잠금"을 사용하도록하십시오. 병목! (단위 테스트는 서버 연결을 만든 미리 작성된 라이브러리를 사용하기 때문에 내가 취한 접근 방식입니다. 단위 테스트를 위해 프로덕션 소프트웨어의 불안정성이 너무 큽니다.)

  3. 일시적으로 깊은 반사 (즉, 개인 FieldInfos ... 개인 int _channelPriority (내 생각) ... Activator.GetObject 호출하기 전에 두 번 확인을 사용 반사판을 사용하여)을 사용하여 대상 채널의 우선 순위를 범프. 이것은 스레드 문제에 개방적이며 프레임 워크 버전이 아닙니다. (따라서이 버전은 피할 수 있습니다.)