Compartir a través de


Detección de los servicios de intermediación disponibles

Visual Studio o sus extensiones pueden exponer servicios asincrónicamente. En este documento se describe cómo detectar servicios asincrónicas expuestos por Visual Studio.

Consulte la documentación de una extensión para detectar sus propios servicios asincrónicos.

Clase de servicios de Visual Studio

Visual Studio y el SDK de Visual Studio ofrecen muchos servicios asincrónicas. Estos servicios son accesibles a través de un ServiceRpcDescriptor objeto que a menudo se puede obtener de la VisualStudioServices clase .

Otros servicios asincrónicas pueden existir y documentarse con características específicas de Visual Studio.

La VisualStudioServices clase declara una propiedad estática para varias versiones principales o secundarias de Visual Studio. Cada una de estas propiedades devuelve una instancia de una clase que declara las propiedades que exponen un ServiceRpcDescriptor para un servicio asincrónica. De este modo, puede detectar fácilmente el conjunto de servicios asincrónicas admitidos por una versión determinada de Visual Studio.

Por ejemplo, el servicio de solución asincrónica se introdujo en Visual Studio 2019 Update 5. Para ServiceRpcDescriptor este servicio se puede obtener de VisualStudioServices.VS2019_5Services.SolutionService con código similar al siguiente:

ServiceRpcDescriptor descriptor = Microsoft.VisualStudio.VisualStudioServices.VS2019_5.SolutionService;

Consideraciones sobre la versión

Una extensión de Visual Studio debe consumir un servicio asincronizado con la propiedad de versión de VS más reciente disponible de la VisualStudioServices clase , teniendo en cuenta la versión mínima necesaria de Visual Studio a la que se dirige la extensión. Tomando el ejemplo anterior del servicio de solución, esto significaría que una extensión destinada a Visual Studio 2019 Update 9 o posterior debe adquirir el descriptor VisualStudioServices.VS2019_5Services.SolutionService de la propiedad VisualStudioServices.VS2019_9. Vamos a actualizar el ejemplo anterior al código siguiente:

ServiceRpcDescriptor descriptor = Microsoft.VisualStudio.VisualStudioServices.VS2019_9.SolutionService;

La adquisición del descriptor de la propiedad con versión más reciente en VisualStudioServices garantiza que el servicio RPC será lo más eficaz posible y el propio servicio proporcionará el comportamiento más reciente. Al actualizar la extensión para que requiera una versión más reciente de Visual Studio, considere la posibilidad de revisar todo el uso de la VisualStudioServices clase y actualizar las referencias a descriptores para usar las propiedades con versiones más recientes para que coincidan con la versión de Visual Studio que tiene como destino.

Un servicio asincrónica que se adquirió mediante una ServiceRpcDescriptor propiedad con versiones anteriores en VisualStudioServices puede emular su comportamiento tal como estaba en esa versión anterior, incluido posiblemente reproduciendo limitaciones de características o comportamientos extraños.

Una extensión de Visual Studio que tenga como destino y se ejecute en una versión determinada de Visual Studio puede solicitar un servicio asincronado que termine de activarse a través de una conexión de Live Share. En tales casos, el proceso remoto de Visual Studio puede estar ejecutando una versión diferente del proceso local de Visual Studio. Es posible que se produzca un error en una solicitud de un servicio asincrónica en un invitado de Live Share durante una sesión de Live Share cuando el host de Live Share no ofrezca ese servicio asincrónica de la versión solicitada.

Considere la posibilidad de incluir un plan de reserva para cuando el servicio asincronizado no esté disponible. Este plan de reserva puede incluir solicitar de nuevo el servicio asincrónico desde una propiedad con versiones anteriores en VisualStudioServices , ya que podría realizarse correctamente si el host de Live Share es una versión anterior de Visual Studio. Tenga en cuenta al hacerlo que algunos miembros de la interfaz de servicio podrían no estar disponibles en la propia implementación del servicio.

Un servicio asincrónica puede agregar miembros a su interfaz de servicio incluso después del envío. Preste atención a la documentación de IntelliSense en cada miembro de la interfaz para ver si se menciona una versión de servicio mínima necesaria en ese miembro.

Un intento de invocar un miembro que el servicio remoto no implementa realmente iniciará un RemoteMethodNotFoundException.

Consulte también