Cómo: solucionar problemas de serviciosHow to: Troubleshoot Services

Hay varios problemas comunes que pueden producirse al intentar obtener un servicio:There are several common problems that can occur when you try to get a service:

  • El servicio no está registrado con Visual StudioVisual Studio.The service is not registered with Visual StudioVisual Studio.

  • Tipo de interfaz y no por tipo de servicio, se solicita el servicio.The service is requested by interface type and not by service type.

  • No se sitúa el VSPackage solicita el servicio.The VSPackage requesting the service has not been sited.

  • Se utiliza el proveedor de servicio incorrecta.The wrong service provider is used.

    Si no se puede obtener el servicio solicitado, la llamada a GetService devuelve null.If the requested service cannot be obtained, the call to GetService returns null. Siempre debe probar si hay valores null después de solicitar un servicio:You should always test for null after requesting a service:

IVsActivityLog log =   
    GetService(typeof(SVsActivityLog)) as IVsActivityLog;  
if (log == null) return;  

Para solucionar problemas de un servicioTo troubleshoot a service

  1. Examine el registro del sistema para ver si el servicio se ha registrado correctamente.Examine the system registry to see whether the service has been correctly registered. Para obtener más información, consulte Cómo: proporcionar un servicio.For more information, see How to: Provide a Service.

    El siguiente fragmento del archivo .reg muestra cómo se puede registrar el servicio de SVsTextManager:The following .reg file fragment shows how the SVsTextManager service might be registered:

    [HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\<version number>\Services\{F5E7E71D-1401-11d1-883B-0000F87579D2}]  
    @="{F5E7E720-1401-11d1-883B-0000F87579D2}"  
    "Name"="SVsTextManager"  
    

    En el ejemplo anterior, el número de versión es la versión de Visual StudioVisual Studio, como 12.0 o 14.0, la clave {F5E7E71D-1401-11d1-883B-0000F87579D2} es el identificador de servicio (SID) del servicio, SVsTextManager y el valor de predeterminada {} F5E7E720-1401-11D1-883B-0000F87579D2} es el GUID del Administrador de texto VSPackage, que proporciona el servicio del paquete.In the example above, version number is the version of Visual StudioVisual Studio, such as 12.0 or 14.0, the key {F5E7E71D-1401-11d1-883B-0000F87579D2} is the service identifier (SID) of the service, SVsTextManager, and the default value {F5E7E720-1401-11d1-883B-0000F87579D2} is the package GUID of the text manager VSPackage, which provides the service.

  2. Usar el tipo de servicio y no el tipo de interfaz al llamar a GetService.Use the service type and not the interface type when you call GetService. Cuando se solicita un servicio de Visual StudioVisual Studio, Package extrae el GUID del tipo.When requesting a service from Visual StudioVisual Studio, Package extracts the GUID from the type. No se encuentre un servicio si se dan las condiciones siguientes:A service will not be found if the following conditions exist:

    1. Un tipo de interfaz se pasa a GetService en lugar del tipo de servicio.An interface type is passed to GetService instead of the service type.

    2. Ningún GUID se asigna explícitamente a la interfaz.No GUID is explicitly assigned to the interface. Por lo tanto, el sistema crea un GUID predeterminado de un objeto según sea necesario.Therefore, the system creates a default GUID for an object as needed.

  3. Asegúrese de que sitúa el VSPackage solicita el servicio.Be sure the VSPackage requesting the service has been sited. Visual StudioVisual Studioun VSPackage de sitios después de crear y antes de llamar a Initialize. sites a VSPackage after constructing it and before calling Initialize.

    Si tiene código en un constructor de VSPackage que necesita un servicio, muévalo al método Initialize.If you have code in a VSPackage constructor that needs a service, move it to the Initialize method.

  4. Asegúrese de que está usando el proveedor de servicio correcta.Be sure that you are using the correct service provider.

    No todos los proveedores de servicios son iguales.Not all service providers are alike. El proveedor de servicios que Visual StudioVisual Studio pasa a una ventana de herramientas difiere de la que se pasa a un paquete VSPackage.The service provider that Visual StudioVisual Studio passes to a tool window differs from the one it passes to a VSPackage. El proveedor de servicios de la ventana de herramienta conoce STrackSelection, pero no conozca SVsRunningDocumentTable.The tool window service provider knows about STrackSelection, but does not know about SVsRunningDocumentTable. Puede llamar a GetGlobalService para obtener un proveedor de servicios de VSPackage desde dentro de una ventana de herramientas.You can call GetGlobalService to get a VSPackage service provider from within a tool window.

    Si una ventana de herramientas hospeda un control de usuario o cualquier otro contenedor de control, el contenedor se sitúa el modelo de componentes de Windows y no tendrá acceso a cualquier Visual StudioVisual Studio servicios.If a tool window hosts a user control or any other control container, the container will be sited by the Windows component model and will not have access to any Visual StudioVisual Studio services. Puede llamar a GetGlobalService para obtener un proveedor de servicios de VSPackage desde dentro de un contenedor de control.You can call GetGlobalService to get a VSPackage service provider from within a control container.

Vea tambiénSee Also

Lista de servicios disponibles List of Available Services
Uso y proporciona servicios Using and Providing Services
Conceptos básicos del servicioService Essentials