.NET Framework Remoting의 이벤트 및 대리자

이 항목은 이전 버전의 기존 응용 프로그램과의 호환성을 위해 유지되고 있으나 새로운 개발에는 권장되지 않는 레거시 기술에 대해 설명합니다. 분산 응용 프로그램은 이제 WCF(Windows Communication Foundation)를 사용하여 개발됩니다.

.NET Framework Remoting에서 이벤트와 대리자를 사용할 수 있지만 성공적으로 사용하려면 두 가지 중요한 문제를 해결해야 합니다. 특히 IpcChannel에서 인증이 사용되는 경우에만 이벤트와 대리자를 사용해야 합니다.

대리자 사용

원격 대리자는 해결해야 하는 보안 문제를 만듭니다. 클라이언트가 대리자를 서버로 전달하는 경우(일반적으로 클라이언트가 이벤트 처리기를 원격 이벤트에 연결할 때 수행됨) 서비스가 의도된 메서드와 동일한 서명을 가진, 권한이 없는 메서드를 연결된 대리자가 참조할 수 있습니다. 의도되지 않은 메서드와 의도된 메서드의 서명이 일치하므로 메서드가 정적이어서 원격 클라이언트에서 호출할 수 없는 경우에도 서비스가 의도되지 않은 메서드를 호출할 수 있습니다.

이 문제를 줄이려면 서버가 사용자 지정 매개 변수 형식을 사용하여 대리자를 정의해야 하고 해당 형식을 포함하는 어셈블리가 강력한 이름을 가져야 합니다. 또한 이러한 통신을 항상 인증(암호화하지 않는 경우)해야 합니다. 의도한 형식인지 확실하지 않으면 서버의 형식이 deserialize될 수 없도록 합니다.

이벤트 사용

대리자로 인해 보안 문제가 발생할 경우 이벤트를 사용하지 않는 것이 좋습니다. 대신 클라이언트와 통신해야 할 때 서비스가 호출할 수 있는 메서드를 게시하는 클라이언트 콜백 서비스를 정의합니다. 인증된 IpcChannel에 원격 이벤트를 사용하려는 경우(및 앞에서 설명한 대로 대리자를 선언한 경우) 클라이언트 이벤트 처리기의 메서드가 단방향 호출이 되도록 해야 합니다. 이는 이벤트를 발생시킬 때 서버가 이벤트 호출 목록의 대리자를 호출하기 때문입니다. 이벤트 시스템은 클라이언트가 반환되거나 시간 초과될 때까지 해당 호출을 차단합니다. 따라서 수신 대기하지 않는 클라이언트는 이벤트 처리기가 단방향 메서드가 아닌 경우 단순한 이벤트의 처리량을 크게 줄입니다.

참고 항목

개념

원격 서비스의 보안