Compartir a través de


Obtención de objetos de servicio

Los objetos de dispositivo exponen una propiedad denominada Services que devuelve una colección de objetos Service que contiene un objeto de servicio para cada servicio exportado por el dispositivo. Las aplicaciones pueden recorrer esta colección secuencialmente o solicitar un servicio determinado mediante su identificador de servicio.

Ejemplo de VBScript

El ejemplo siguiente es código VBScript que extrae objetos service para dos de los servicios exportados por un dispositivo.

' Get the service objects
services = device.Services
    
Set appService = services( "urn:upnp-org:serviceId:DVDVideo" )
Set xportService = services( "urn:upnp-org:serviceId:AVTransport" )

La primera línea extrae la colección de servicios del objeto Device consultando la propiedad Services . Las dos líneas siguientes obtienen los dos objetos Service deseados de la colección especificando sus identificadores de servicio. La colección de servicios también se puede recorrer secuencialmente mediante un para cada ... siguiente bucle.

Ejemplo de C++

En el ejemplo siguiente se muestra el código de C++ necesario para obtener objetos de servicio de un dispositivo. En primer lugar, el código de ejemplo consulta la propiedad IUPnPDevice::Services en la interfaz que se pasó a la función. Esto devuelve una colección de servicios mediante la interfaz IUPnPServices . Para obtener objetos de servicio individuales, use el método Item y especifique los identificadores de servicio solicitados. Para recorrer secuencialmente la colección, use los métodos IEnumVARIANT::Reset, IEnumVARIANT::Next e IEnumVARIANT::Skip . Este ejemplo es similar al ejemplo que se usa para recorrer la colección IUPnPDevices .

#include <windows.h>
#include <upnp.h>

#pragma comment(lib, "oleaut32.lib")


HRESULT ExtractServices(IUPnPDevice * pDevice)
{
    // Create a BSTR to hold the service name
    BSTR bstrServiceName = SysAllocString(L"urn:upnp-org:servicId:DVDVideo");
    if (NULL == bstrServiceName)
    {
        return E_OUTOFMEMORY;
    }
    // Get the list of services available on the device
    IUPnPServices * pServices = NULL;
    HRESULT hr = pDevice->get_Services(&pServices);
    if (SUCCEEDED(hr))
    {
        // Retrieve the service we are interested in
        IUPnPService * pAppService = NULL;
        hr = pServices->get_Item(bstrServiceName, &pAppService);
        if (SUCCEEDED(hr))
        {
            // Do something interesting with the service object
            pAppService->Release();
        }
        pServices->Release();
    }
    SysFreeString(bstrServiceName);
    return hr;
}