예제 #1
0
    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);
            }
        }