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>(); })); }
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]; })); }