예제 #1
0
        public static Task <IPagedReply> IsPaged <TResponse>(this ICallback callback) where TResponse : class
        {
            return(callback.Register(x =>
            {
                var reply = x.Messages.FirstOrDefault();
                if (reply == null || reply is Reject)
                {
                    var reject = reply as Reject;
                    Logger.WarnFormat("Query was rejected - Message: {0}\nException: {1}", reject.Message, reject.Exception);
                    if (reject != null && reject.Exception != null)
                    {
                        throw new QueryRejectedException(reject.Message, reject.Exception);
                    }
                    else if (reject != null)
                    {
                        throw new QueryRejectedException(reject.Message);
                    }
                    throw new QueryRejectedException();
                }
                if (reply is Error)
                {
                    var error = reply as Error;
                    Logger.WarnFormat("Query raised an error - Message: {0}", error.Message);
                    throw new QueryRejectedException(error.Message);
                }

                var package = reply as IPagedReply;
                if (package == null)
                {
                    throw new QueryRejectedException($"Unexpected response type: {reply.GetType().FullName}");
                }

                return package;
            }));
        }
        void Callbacks()
        {
            #region sqlserver-config-callbacks 2

            BusConfiguration busConfiguration = new BusConfiguration();
            IStartableBus    bus      = Bus.Create(busConfiguration);
            ICallback        callback = bus.Send(new Request());
            callback.Register(ProcessResponse);
            #endregion

            #region sqlserver-config-callbacks-reply 2

            bus.Return(42);

            #endregion
        }
 public static Task <TResponse> IsCommand <TResponse>(this ICallback callback)
 {
     return(callback.Register(x =>
     {
         var reply = x.Messages.FirstOrDefault();
         if (reply == null || reply is Reject)
         {
             var reject = reply as Reject;
             if (reject != null)
             {
                 throw new CommandRejectedException(reject.Message);
             }
             throw new CommandRejectedException();
         }
         return reply.ConvertTo <TResponse>();
     }));
 }
예제 #4
0
    public async Task <TResponse> SendRequest(TRequest request)
    {
        if (typeof(TResponse).IsEnum)
        {
            ICallback enumLocal = bus.SendLocal(request);
            return(await enumLocal.Register <TResponse>());
        }
        if (typeof(TResponse) == typeof(int))
        {
            ICallback intLocal = bus.SendLocal(request);
            object    intValue = await intLocal.Register();

            return((TResponse)intValue);
        }
        return(await bus.SendLocal(request).Register(ar =>
        {
            object[] messages = ar.Messages;
            return (TResponse)messages[0];
        }));
    }