컨텍스트 핸들
경우에 따라 분산 애플리케이션은 클라이언트 호출 간에 상태 정보를 유지 관리하기 위해 서버 프로그램이 필요합니다. 한 번에 둘 이상의 클라이언트를 서비스하는 서버 프로그램은 각 클라이언트에 대한 상태 정보를 유지해야 합니다. 클라이언트와 서버는 서로 다른 컴퓨터에서 서로 다른 주소 공간을 사용하므로 반드시 서로를 신뢰하지는 않으므로 데이터 공유에 대한 일반적인 접근 방식이 작동하지 않는 경우가 많습니다. instance 경우 클라이언트와 서버는 동일한 전역 주소 공간을 공유하지 않으므로 원격 세션에 대한 상태 정보를 전역 변수에 유지할 수 없습니다. 다른 컴퓨터에서 실행되므로 공유 파일에 정보를 보관하기가 어렵습니다. 간단한 방법은 클라이언트에 모든 상태를 배송하고 클라이언트가 다음 호출 시 반환하도록 하는 것일 수 있지만, 이 방법에는 결함이 있습니다. 서버가 클라이언트를 신뢰하여 올바른 상태를 반환할 필요는 없으며, 상태는 파일 핸들 또는 열린 소켓과 같은 서버의 다른 일부 상태에 암시적으로 연결될 수 있습니다.
Microsoft RPC는 서버에서 지정된 클라이언트와 연결된 상태를 유지하기 위한 컨텍스트 핸들이라는 강력하고 안전한 메커니즘을 제공합니다. 상태 정보를 서버의 컨텍스트라고 합니다. 클라이언트는 컨텍스트 핸들을 가져와 개별 RPC 세션에 대한 서버의 컨텍스트를 식별할 수 있습니다.
예를 들어 분산 애플리케이션의 각 클라이언트는 서버 프로그램이 RPC 세션에 대한 데이터 파일을 만들고 업데이트할 수 있습니다. 서버는 각 클라이언트의 데이터 파일에 대한 파일 핸들을 컨텍스트 핸들로 사용할 수 있습니다. 클라이언트가 서버에서 만든 데이터 파일에 대한 작업을 요청할 때마다 클라이언트는 컨텍스트 핸들을 서버에 전달합니다. 클라이언트는 실제로 파일 핸들 자체를 얻지 못합니다. 서버 RPC 런타임이 파일 핸들과 고유하게 연결할 수 있는 불투명 토큰을 가져옵니다. 컨텍스트 핸들은 실제로 파일 핸들이므로 컨텍스트 핸들은 서버의 주소 공간에서만 의미가 있습니다. 그러나 클라이언트 프로그램은 컨텍스트 핸들을 사용하여 업데이트를 수행할 파일을 서버에 알릴 수 있습니다.
다른 데이터는 컨텍스트 핸들일 수도 있습니다. instance 경우 클라이언트와 서버는 데이터베이스 레코드의 레코드 번호를 파일 핸들로 사용할 수 있습니다. 클라이언트가 특정 레코드에 대해 여러 업데이트를 수행해야 하는 경우 컨텍스트 핸들로 레코드 번호를 가져올 수 있습니다. 데이터베이스 레코드를 업데이트하는 원격 프로시저를 호출할 때마다 레코드 번호를 서버에 전달합니다.
대부분의 경우 컨텍스트 핸들은 서버에서 다양한 관리 정보를 유지하는 서버의 메모리 블록을 가리킵니다.
이 섹션에서는 컨텍스트 핸들을 정의하고 사용하는 방법에 대한 정보를 제공합니다. 토론은 다음 topics 제공됩니다.
- 컨텍스트 핸들을 사용한 인터페이스 개발
- 컨텍스트 핸들을 사용하여 서버 개발
- 컨텍스트 핸들을 사용하여 클라이언트 개발
- 서버 컨텍스트 런다운 루틴
- 클라이언트 컨텍스트 재설정
- 다중 스레드 클라이언트 및 컨텍스트 핸들