static async Task <MessageValidationException> Send(object message, [CallerMemberName] string key = "") { EndpointConfiguration configuration = new("DataAnnotationsIncoming" + key); configuration.UseTransport <LearningTransport>(); configuration.PurgeOnStartup(true); configuration.DisableFeature <TimeoutManager>(); ManualResetEvent resetEvent = new(false); configuration.RegisterComponents(components => components.RegisterSingleton(resetEvent)); MessageValidationException exception = null !; var recoverability = configuration.Recoverability(); recoverability.CustomPolicy( (_, context) => { exception = (MessageValidationException)context.Exception; resetEvent.Set(); return(RecoverabilityAction.MoveToError("error")); }); configuration.UseDataAnnotationsValidation(outgoing: false); var endpoint = await Endpoint.Start(configuration); await endpoint.SendLocal(message); if (!resetEvent.WaitOne(TimeSpan.FromSeconds(10))) { throw new("No Set received."); } return(exception); }
private void OnValidationException(MessageValidationException validationException) { var channel = _channelService.Find(validationException.FailChannelId.ToHex()); if (channel != null) { LogMessageValidationException(channel, channel.TemporaryChannelId, validationException.MessageToValidate, LocalChannelLogEntryType.MessageValidationException, validationException.Message); return; } var pendingChannel = _channelService.PendingChannels.SingleOrDefault(p => p.TemporaryChannelId == validationException.FailChannelId.ToHex()); if (pendingChannel != null) { var persistedChannel = pendingChannel.Channel.Id != 0 ? pendingChannel.Channel : null; LogMessageValidationException(persistedChannel, validationException.FailChannelId.ToHex(), validationException.MessageToValidate, LocalChannelLogEntryType.MessageValidationException, validationException.Message); } }