C# > UPnP - COMException: The owner of the PerUser subscription is not logged on to the system specified (Exception from HRESULT: 0x80040210)

2

I'm trying to communicate with dlna compliant devices using a C#.net application, using the UPnP protocol. I'm using the default Visual studio UPnP library("UPnP 1.0 type library (control point)"). I list all rendering devices using UPNPDeviceFinder.FindByType. All works fine...

Now I get the AVTransport service using the function:

    public UPnPService GetAVTransport(UPnPDevice mediaDevice)
    {
        foreach (UPnPService service in mediaDevice.Services)
        {
            Debug.Print(service.ServiceTypeIdentifier);
            if (service.ServiceTypeIdentifier == "urn:schemas-upnp-org:service:AVTransport:1")
            {
                return service;
            }
        }

        return null;
    }

I try to send a play command to a device like so:

    Service = GetAVTransport(Device);

    object[] input = new object[2]
    {
        "0", // Object Id
        "1" //  Speed
    };

    object output = new object();

    Service.InvokeAction("Play", input, ref output);

On the last line, i get the following error:

COMException: The owner of the PerUser subscription is not logged on to the system specified (Exception from HRESULT: 0x80040210)

What does this mean. It's totally unclear as to why this exception occurs.

Thanks, Thomas

c#
.net
visual-studio-2010
upnp
comexception
asked on Stack Overflow Sep 21, 2012 by Oht

1 Answer

3

COM tried to be helpful by providing the nearest known textual message, but it confused you instead. The problem is that your HRESULT facility code is 004, which means FACILITY_ITF which means ANY COM interface method. As said explicitly in the Microsoft COM error code doc:

two HRESULTs with exactly the same 32-bit value returned from two different interfaces might have different meanings

Code 210 means different things per interface. COM has selected EVENT_E_PER_USER_SID_NOT_LOGGED_ON which is not related to UPnP at all. It should have told you just the code, or be clever enough to know that in UPnP it means UPNP_E_ACTION_REQUEST_FAILED. I have found out the code mapping in UPnP.h from Windows C++ SDK, dunno where C# looks for it. With any further COM exceptions, ignore the text and just look up the code in the list of errors specific for the UPnP method you just called. Again the same code might have little bit different meaning in scope of different UPnP methods.

Now on to the reason why the request has failed on the device. I bet you didn't call any SetAVTransport action, so the device simply doesn't know what to play and it's TransportState is NO_MEDIA. If you don't feel like studying yet how to use AVTransport service correctly and just want to see your MediaRenderer doing something magically, try RenderingControl service. Actions SetMute and SetVolume should be there for sure, setting RGB levels is fun too but may not be provided by your particular renderer device.

When in doubt, use the mighty DeviceSpy of Intel Developer Tools.

answered on Stack Overflow Sep 21, 2012 by Pavel Zdenek

User contributions licensed under CC BY-SA 3.0