示例#1
0
        public override async Task ServiceReady(ServiceSessionOperationMessage request, IMemoryChannel channel, DataTransferContext context)
        {
            try
            {
                if (string.IsNullOrEmpty(request.ResponderFor))
                {
                    CheckAuth(context, "ActAsService");
                }
                else
                {
                    CheckAuth(context, "ConnectAnyService", request.ResponderFor);
                }

                await base.ServiceReady(request, channel, context);
            }
            catch (Exception ex)
            {
                LogEnvironment.LogEvent(ex.OutlineException(), LogSeverity.Error);
                throw;
            }
            finally
            {
                TemporaryGrants.UnRegisterService(request.ServiceName);
                if (!string.IsNullOrEmpty(request.ResponderFor))
                {
                    TemporaryGrants.RevokeTemporaryPermission(request.ResponderFor, request.ServiceName);
                }
            }
        }
示例#2
0
 public override Task <ServiceDiscoverResponseMessage> DiscoverService(ServiceDiscoverMessage request, DataTransferContext context)
 {
     try
     {
         CheckAuth(context, "ConnectAnyService", request.TargetService);
         return(base.DiscoverService(request, context));
     }
     catch (Exception ex)
     {
         return(Task.FromResult(new ServiceDiscoverResponseMessage {
             Ok = false, Reason = ex.Message, TargetService = request.TargetService
         }));
     }
 }
示例#3
0
        public override Task <RegisterServiceResponseMessage> RegisterService(RegisterServiceMessage request, DataTransferContext context)
        {
            try
            {
                if (string.IsNullOrEmpty(request.ResponderFor))
                {
                    CheckAuth(context, "ActAsService");
                    TemporaryGrants.RegisterService(request.ServiceName, context.Identity.Name);
                }
                else
                {
                    CheckAuth(context, "ConnectAnyService", request.ResponderFor);
                    TemporaryGrants.GrantTemporaryPermission(request.ResponderFor, request.ServiceName);
                }

                return(base.RegisterService(request, context));
            }
            catch (Exception ex)
            {
                LogEnvironment.LogEvent(ex.OutlineException(), LogSeverity.Error);
                return(Task.FromResult(new RegisterServiceResponseMessage {
                    Ok = false, Reason = ex.Message
                }));
            }
        }
示例#4
0
        public override Task CommitServiceOperation(ServiceOperationResponseMessage request, DataTransferContext context)
        {
            try
            {
                if (string.IsNullOrEmpty(request.ResponderFor))
                {
                    CheckAuth(context, "ActAsService");
                }
                else
                {
                    CheckAuth(context, "ConnectAnyService", request.ResponderFor);
                }

                return(base.CommitServiceOperation(request, context));
            }
            catch (Exception ex)
            {
                return(Task.FromException(ex));
            }
        }
示例#5
0
 public override Task <ServiceOperationResponseMessage> ConsumeService(ServerOperationMessage request, DataTransferContext context)
 {
     try
     {
         CheckAuth(context, "ConnectAnyService", request.TargetService);
         request.HubUser = JsonHelper.ToJsonStrongTyped(((ClaimsIdentity)context.Identity).ForTransfer());
         return(base.ConsumeService(request, context));
     }
     catch (Exception ex)
     {
         return(Task.FromException <ServiceOperationResponseMessage>(ex));
     }
 }
        public virtual async Task ServiceReady(ServiceSessionOperationMessage request, IMemoryChannel channel, DataTransferContext context)
        {
            CancellationToken cancellationToken = channel.CancellationToken;

            try
            {
                serviceBackend.Broker.AddServiceTag(request, "ChannelName", channel.Name);
                do
                {
                    string req = null;
                    try
                    {
                        var nextMessage = await serviceBackend.Broker.NextRequest(request);

                        req = nextMessage.OperationId;
                        if (nextMessage != null)
                        {
                            await channel.WriteAsync(new ServerOperationMessage
                            {
                                HubUser          = nextMessage.HubUser,
                                OperationId      = nextMessage.OperationId,
                                OperationPayload = nextMessage.OperationPayload,
                                TargetService    = nextMessage.TargetService,
                                TickBack         = nextMessage.TickBack
                            }).ConfigureAwait(false);
                        }
                        else
                        {
                            await Task.Delay(500, cancellationToken).ConfigureAwait(false);
                        }
                    }
                    catch (ServiceBrokenException sbe)
                    {
                        serviceBackend.Broker.FailOperation(request, req, sbe);
                        LogEnvironment.LogEvent($"Error occurred: {sbe.Message}", LogSeverity.Error);
                        break;
                    }
                    catch (ServiceTimeoutException ste)
                    {
                        serviceBackend.Broker.FailOperation(request, req, ste);
                        LogEnvironment.LogEvent($"Error occurred: {ste.Message}", LogSeverity.Error);
                        break;
                    }
                    catch (ServiceUnknownException sue)
                    {
                        serviceBackend.Broker.FailOperation(request, req, sue);
                        LogEnvironment.LogEvent($"Error occurred: {sue.Message}", LogSeverity.Error);
                        break;
                    }
                    catch (Exception ex)
                    {
                        serviceBackend.Broker.FailOperation(request, req, ex);
                        LogEnvironment.LogEvent($"Error occurred: {ex.OutlineException()}", LogSeverity.Error);
                    }
                } while (cancellationToken.IsCancellationRequested == false);
            }
            finally
            {
                serviceBackend.Broker.TryUnRegisterService(request);
            }
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="context"></param>
 public DataTransferContextException(DataTransferContext context)
 {
     this.Context = context;
     this.Text    = this.Context.GetText();
 }
        public virtual Task <RegisterServiceResponseMessage> RegisterService(RegisterServiceMessage request, DataTransferContext context)
        {
            LogEnvironment.LogDebugEvent("Registering Service...", LogSeverity.Report);
            var retRaw = serviceBackend.Broker.RegisterService(request);

            return(Task.FromResult(retRaw));
        }
        public virtual Task <ServiceDiscoverResponseMessage> DiscoverService(ServiceDiscoverMessage request, DataTransferContext context)
        {
            var retRaw = serviceBackend.Broker.DiscoverService(request);

            return(Task.FromResult(retRaw));
        }
示例#10
0
        public virtual async Task <ServiceOperationResponseMessage> ConsumeService(ServerOperationMessage request, DataTransferContext context)
        {
            //context.GetHttpContext().RequestServices.VerifyUserPermissions()
            var retRaw = await serviceBackend.Broker.SendMessageToServer(request);

            return(retRaw);
        }
示例#11
0
        public virtual Task CommitServiceOperation(ServiceOperationResponseMessage request, DataTransferContext context)
        {
            serviceBackend.Broker.CommitServerOperation(request);

            return(Task.CompletedTask);
        }
示例#12
0
        public virtual Task <ServiceTickResponseMessage> ServiceTick(ServiceSessionOperationMessage request, DataTransferContext context)
        {
            var retRaw = serviceBackend.Broker.Tick(request);

            return(Task.FromResult(new ServiceTickResponseMessage
            {
                Ok = retRaw.Ok,
                PendingOperationsCount = retRaw.PendingOperationsCount,
                Reason = retRaw.Reason
            }));
        }