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

1

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

Guv answered 21/9, 2012 at 11:44 Comment(1)
I have same problem using this UPNPLib. How did you go about to solve it? But on my side I can control some devices including Intel media Renderer, WDTV. But my company is recommending a device that throws this Exception in The COM. Looking forward to your replyReaves
B
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.

Burnsides answered 21/9, 2012 at 19:27 Comment(4)
Thanks for your contribution in DLNA topics. Actually I have similar problem with this topic above. Mine is little bit diffrenet because my project works on all the Rendering controls I have tested(including WDTV, Intels AVMedia Renderer etc). But My company got this crazy Rendering device that they want me to pair with my Controller. The problem is that its always throws a COMException when I try to play. [the problem come when I try to iterate through the devices service " foreach (UPnPService service in device.Services) {}"] Is there a way I can further investigate this?Reaves
Your question is "similar" only in the sense of being about UPnP and COM, which means "very vaguely". Post a new question. Refer to this question if you wish.Burnsides
Thanks for your response. Here is the new question. #19207674 I really need this help: my first project in my first Job :(Reaves
To backup Pavel's answer, I just got this error when passing an incorrectly sized array to an old Fortran library!Bignoniaceous

© 2022 - 2024 — McMap. All rights reserved.