다음을 통해 공유


편집기 RPC 지원

새 Visual Studio 확장성 모델은 완전히 별도의 프로세스에 있으며 확장 프로세스와 Visual Studio 프로세스 간의 통신은 스트림을 통해 발생하므로 모든 API는 직렬화 가능한 데이터 형식으로 어느 정도 작동해야 합니다. 일반적으로 확장은 이러한 구현 세부 정보를 무시할 수 있습니다. 일부 시나리오에서는 확장에서 얻은 this.Extensibility.ServiceBrokerRPC 서비스와 직접 인터페이스해야 할 수 있습니다.

직렬화 RPC 가능 형식

RPC 서비스와의 상호 작용을 용이하게 하기 위해 개체 모델은 대부분의 코어 형식과 다음과 같은 직렬화 가능한 RPC 형식에 RpcContract 속성을 노출합니다.

  • VersionedTextDocumentRange - 속성을 통해 액세스할 수 있는 직렬화 가능한 버전 Span1:1입니다 RpcContract . 이 형식은 프로세스 간의 대부분의 RPC 계약에 사용해야 합니다.
  • VersionedTextDocumentPosition - 속성을 통해 액세스할 수 있는 직렬화 가능한 버전 Position1:1입니다 RpcContract . 이 형식은 프로세스 간의 대부분의 RPC 계약에 사용해야 합니다.
  • Range - Uri 및 버전 번호를 생략하는 범위의 직렬화 가능 버전입니다.
  • Microsoft.VisualStudio.RpcContracts.Utilities.Position - Uri 및 버전 번호를 Position 생략하는 범위의 직렬화 가능 버전입니다.
  • TextView - 속성을 통해 액세스할 수 있는 1:1 직렬화된 형식 ITextView입니다 RpcContract .
  • TextDocument - 속성을 통해 1:1 직렬화된 형식 ITextDocument 입니다 RpcContract .

VersionedTextDocumentRangeVersionedTextDocumentPosition 와 달리 RangeMicrosoft.VisualStudio.RpcContracts.Utilities.Position 는 Uri 및 문서 버전을 생략하여 직렬화 가능한 표현이 더 적습니다. 이 형식은 성능에 대한 페이로드 크기를 줄여야 하는 범위/범위 등가 항목을 많이 포함하는 RPC 계약에서 사용해야 합니다. 이러한 RPC 계약은 IEditorHostService에 의해 SpanPosition 개체로 인스턴스화될 스팬 또는 범위에 대한 Uri 문서와 버전을 통과해야 합니다. IEditorHostService 는 텍스트 버퍼의 확장 로컬 복사본이 있는 인터페이스이며 RPC 형식에서 설명하는 문서의 열기 및 닫기를 관리합니다.

VS에서 사용되는 RPC 모델인 원격 UI에 대해 자세히 알아봅니다. 원격 UI의 확장성.