예제 #1
0
        protected override IWampCancellableInvocation InnerInvoke <TMessage>(IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments, IDictionary <string, TMessage> argumentsKeywords)
        {
            try
            {
                object result =
                    InvokeSync(caller,
                               formatter,
                               details,
                               arguments,
                               argumentsKeywords,
                               out IDictionary <string, object> outputs);

                CallResult(caller, result, outputs);
            }
            catch (WampException ex)
            {
                mLogger.ErrorFormat(ex, "An error occured while calling {ProcedureUri}", this.Procedure);
                IWampErrorCallback callback = new WampRpcErrorCallback(caller);
                callback.Error(ex);
            }
            catch (Exception ex)
            {
                WampException      wampException = ConvertExceptionToRuntimeException(ex);
                IWampErrorCallback callback      = new WampRpcErrorCallback(caller);
                callback.Error(wampException);
            }

            return(null);
        }
예제 #2
0
        protected void HandleException(IWampRawRpcOperationRouterCallback caller, WampException ex)
        {
            mLogger.ErrorFormat(ex, "An error occurred while calling {ProcedureUri}", this.Procedure);
            IWampErrorCallback callback = new WampRpcErrorCallback(caller);

            callback.Error(ex);
        }
예제 #3
0
        protected void HandleException(IWampRawRpcOperationRouterCallback caller, Exception ex)
        {
            WampException      wampException = ConvertExceptionToRuntimeException(ex);
            IWampErrorCallback callback      = new WampRpcErrorCallback(caller);

            callback.Error(wampException);
        }
        protected override IWampCancellableInvocation InnerInvoke <TMessage>(IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails options, TMessage[] arguments, IDictionary <string, TMessage> argumentsKeywords)
        {
            CancellationTokenSourceInvocation result = null;

            try
            {
                CancellationToken token = CancellationToken.None;

                if (SupportsCancellation)
                {
                    CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
                    result = new CancellationTokenSourceInvocation(cancellationTokenSource);
                    token  = cancellationTokenSource.Token;
                }

                Task <object> task =
                    InvokeAsync(caller,
                                formatter,
                                options,
                                arguments,
                                argumentsKeywords,
                                token);

                task.ContinueWith(x => TaskCallback(x, caller));
            }
            catch (WampException ex)
            {
                mLogger.ErrorFormat(ex, "An error occured while calling {0}", this.Procedure);
                IWampErrorCallback callback = new WampRpcErrorCallback(caller);
                callback.Error(ex);
            }

            return(result);
        }
        private void TaskCallback(Task <object> task, IWampRawRpcOperationRouterCallback caller)
        {
            if (task.Exception == null)
            {
                object result = task.Result;
                CallResult(caller, result);
            }
            else
            {
                Exception innerException = task.Exception.InnerException;

                mLogger.ErrorFormat(innerException, "An error occured while calling {0}", this.Procedure);

                WampException wampException = innerException as WampException;

                if (wampException == null)
                {
                    wampException = ConvertExceptionToRuntimeException(innerException);
                }

                IWampErrorCallback callback = new WampRpcErrorCallback(caller);

                callback.Error(wampException);
            }
        }
        protected override async void InnerInvoke <TMessage>(IWampRawRpcOperationRouterCallback caller,
                                                             IWampFormatter <TMessage> formatter,
                                                             InvocationDetails details,
                                                             TMessage[] arguments,
                                                             IDictionary <string, TMessage> argumentsKeywords)
        {
            try
            {
                Task <object> task =
                    InvokeAsync(caller,
                                formatter,
                                details,
                                arguments,
                                argumentsKeywords);

                object result = await task;

                CallResult(caller, result);
            }
            catch (Exception ex)
            {
                mLogger.ErrorFormat(ex, "An error occured while calling {ProcedureUri}", this.Procedure);

                WampException wampException = ex as WampException;

                if (wampException == null)
                {
                    wampException = ConvertExceptionToRuntimeException(ex);
                }

                IWampErrorCallback callback = new WampRpcErrorCallback(caller);

                callback.Error(wampException);
            }
        }
        protected override void InnerInvoke <TMessage>(IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails options, TMessage[] arguments, IDictionary <string, TMessage> argumentsKeywords)
        {
            try
            {
                Task <object> task =
                    InvokeAsync(caller,
                                formatter,
                                options,
                                arguments,
                                argumentsKeywords);

                task.ContinueWith(x => TaskCallback(x, caller));
            }
            catch (WampException ex)
            {
                mLogger.ErrorFormat(ex, "An error occured while calling {0}", this.Procedure);
                IWampErrorCallback callback = new WampRpcErrorCallback(caller);
                callback.Error(ex);
            }
        }
예제 #8
0
        private async Task InnerInvokeAsync <TMessage>(IWampRawRpcOperationRouterCallback caller,
                                                       IWampFormatter <TMessage> formatter,
                                                       InvocationDetails details,
                                                       TMessage[] arguments,
                                                       IDictionary <string, TMessage> argumentsKeywords,
                                                       CancellationToken cancellationToken)
        {
            try
            {
                Task <object> task =
                    InvokeAsync(caller,
                                formatter,
                                details,
                                arguments,
                                argumentsKeywords,
                                cancellationToken);

                object result = await task.ConfigureAwait(false);

                CallResult(caller, result);
            }
            catch (Exception ex)
            {
                mLogger.ErrorFormat(ex, "An error occurred while calling {ProcedureUri}", this.Procedure);


                if (!(ex is WampException wampException))
                {
                    wampException = ConvertExceptionToRuntimeException(ex);
                }

                IWampErrorCallback callback = new WampRpcErrorCallback(caller);

                callback.Error(wampException);
            }
        }