SendMessage Control.StartRecordingCommand DOES NOT work with non admin user

Hi, I’m trying example

VideoViewer

without modifications.

Every time I try to start recording (clicking on red button) I receive the messages that I copy-pasted here down below the line.

It says “You do not have sufficient permissions to complete the operation”

Needless to say that the authenticated user HAS start record and stop record permissions BOTH enabled!

IN FACT, if I try with XProtect Smart Client (same user, same authentication, same Camera) then it lets me Start and Stop record manually…

Can you help me please? Why does sdk thinks that my user has not those privileges?

Obviously, if I login with an administrator account it works perfectly.

----------------------------------------------------------------

MIP: Debug: SendMessage ():Control.StartRecordingCommand to MessageManager.StartRecordingHandler

Exception thrown: ‘System.Net.WebException’ in System.dll

Exception thrown: ‘System.Net.WebException’ in System.dll

Exception thrown: ‘System.ServiceModel.FaultException`1’ in System.ServiceModel.dll

Exception thrown: ‘System.ServiceModel.FaultException`1’ in mscorlib.dll

Exception thrown: ‘System.Net.WebException’ in System.dll

Exception thrown: ‘System.Net.WebException’ in System.dll

Exception thrown: ‘System.ServiceModel.FaultException`1’ in System.ServiceModel.dll

Exception thrown: ‘System.ServiceModel.FaultException`1’ in mscorlib.dll

MIP: Error: StartRecording Message ():Exception source: mscorlib

Exception type: System.ServiceModel.FaultException`1[[System.ServiceModel.ExceptionDetail, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]

Exception message: VMO61008: You do not have sufficient permissions to complete the operation.

Exception target site: HandleReturnMessage

Server stack trace:

in System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)

in System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)

in System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)

in System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]:

in System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)

in System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)

in VideoOS.Common.Proxy.Server.WCF.IServerCommandService.EventTriggerWithMetadata(String token, Guid eventId, KeyValue[] metadata)

in VideoOS.Platform.SDK.Config.Shared.LoginServerSvc.<>c__DisplayClass2e.b__2d(ServerCommandServiceClient client)

in VideoOS.Platform.SDK.Config.Shared.LoginServerSvc.CallWithRetry(Action`1 call)

in VideoOS.Platform.SDK.Platform.MessageManager.StartRecordingHandler(Message message, FQID dest, FQID source)

StartRecording MessageStartRecording Message ()VMO61008: You do not have sufficient permissions to complete the operation.

Server stack trace:

in System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)

in System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)

in System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)

in System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]:

in System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)

in System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)

in VideoOS.Common.Proxy.Server.WCF.IServerCommandService.EventTriggerWithMetadata(String token, Guid eventId, KeyValue[] metadata)

in VideoOS.Platform.SDK.Config.Shared.LoginServerSvc.<>c__DisplayClass2e.b__2d(ServerCommandServiceClient client)

in VideoOS.Platform.SDK.Config.Shared.LoginServerSvc.CallWithRetry(Action`1 call)

in VideoOS.Platform.SDK.Platform.MessageManager.StartRecordingHandler(Message message, FQID dest, FQID source)

MIP: Debug: SendMessage ():Control.StartRecordingCommand to (Returned)MessageManager.StartRecordingHandler

The program ‘[2024] VideoViewer.exe’ has exited with code 0 (0x0).

The program ‘[2024] VideoViewer.exe: Program Trace’ has exited with code 0 (0x0).

Start and stop recording from external applications is done using events internally and unfortunately these have separate security settings in the roles. To enable this you need to go to the role in question and under External Events allow the Trigger action for both the RequestStartRecording and RequestStopRecording Predefined Events

ok, thank you

Maybe someone should specify this on MIP SDK examples…

Now the question is:

- if I read from VideoOS.Platform.Item.Authorization-> StartRecording: Yes

I DON’T REALLY KNOW if currently logged user CAN REALLY start and stop record manually

How can I know if those properties (external events RequestStartRecording and RequestStopRecording) are flagged for currently logged user?

Unfortunately the answer is that you cannot. You cannot read the permissions on the external events RequestStartRecording and RequestStopRecording with MIP SDK methods.

I will flag this with Milestone Development hoping this can be addressed in a future release.