コード例 #1
0
        public async Task Invoke(HttpContext httpContext, IServiceProvider serviceProvider)
        {
            try
            {
                var objectFactory = serviceProvider.GetService <IObjectFactory>();
                if (objectFactory == null)
                {
                    throw new NullReferenceException("A instância de IObjectFactory não foi definida no IServiceProvider.");
                }

                var ctx = new RequestContext();
                ctx.Request  = new Request(ctx, httpContext);
                ctx.Response = new Response(ctx, httpContext);

                var pipelineInvoker = new PipelineInvoker();

                await pipelineInvoker.InvokeAsync(ctx, objectFactory, () => next.Invoke(httpContext));
            }
            catch (Exception ex)
            {
                ex.Trace();

                var req    = httpContext.Request;
                var res    = httpContext.Response;
                var status = HttpStatusCode.InternalServerError;

                res.StatusCode  = (int)status;
                res.ContentType = "text/plain; charset=UTF-8";

                var ln = Environment.NewLine;
                await res.WriteAsync(
                    $"{(int)status} - {status.ToString().ChangeCase(TextCase.ProperCase)}{ln}{ex.Message}{ln}Caused by:{ln}{ex.GetStackTrace()}"
                    );
            }
        }
コード例 #2
0
        /// <summary>
        /// Define a transport to be used when sending and publishing messages.
        /// </summary>
        protected TransportExtensions <TTransport> UseTransport <TTransport>()
            where TTransport : TransportDefinition, new()
        {
            var serverlessTransport = EndpointConfiguration.UseTransport <ServerlessTransport <TTransport> >();

            PipelineInvoker = serverlessTransport.PipelineAccess();
            return(serverlessTransport.BaseTransportConfiguration());
        }
コード例 #3
0
        /// <summary>
        /// Creates a serverless NServiceBus endpoint running within an Azure Service Bus trigger.
        /// </summary>
        public ServiceBusTriggeredEndpointConfiguration(string endpointName, string connectionStringName = null)
        {
            EndpointConfiguration = new EndpointConfiguration(endpointName);
            //*
            EndpointConfiguration.UseTransport <LearningTransport>().StorageDirectory(@"C:\temp\.learning-nasb");
            PipelineInvoker = PipelineInvoker.CreateNull();
            HackForLearning = () => Task.Delay(1000);

            /*/
             *
             * recoverabilityPolicy.SendFailedMessagesToErrorQueue = true;
             * EndpointConfiguration.Recoverability().CustomPolicy(recoverabilityPolicy.Invoke);
             *
             * // Disable diagnostics by default as it will fail to create the diagnostics file in the default path.
             * // Can be overriden by ServerlessEndpointConfiguration.LogDiagnostics().
             * EndpointConfiguration.CustomDiagnosticsWriter(_ => Task.CompletedTask);
             *
             * // 'WEBSITE_SITE_NAME' represents an Azure Function App and the environment variable is set when hosting the function in Azure.
             * var functionAppName = Environment.GetEnvironmentVariable("WEBSITE_SITE_NAME") ?? Environment.MachineName;
             * EndpointConfiguration.UniquelyIdentifyRunningInstance()
             *  .UsingCustomDisplayName(functionAppName)
             *  .UsingCustomIdentifier(DeterministicGuid.Create(functionAppName));
             *
             * // Look for license as an environment variable
             * var licenseText = Environment.GetEnvironmentVariable("NSERVICEBUS_LICENSE");
             * if (!string.IsNullOrWhiteSpace(licenseText))
             * {
             *  EndpointConfiguration.License(licenseText);
             * }
             *
             * Transport = UseTransport<AzureServiceBusTransport>();
             *
             * var connectionString =
             *  Environment.GetEnvironmentVariable(connectionStringName ?? DefaultServiceBusConnectionName);
             * Transport.ConnectionString(connectionString);
             *
             * var recoverability = AdvancedConfiguration.Recoverability();
             * recoverability.Immediate(settings => settings.NumberOfRetries(5));
             * recoverability.Delayed(settings => settings.NumberOfRetries(3));
             *
             * /**/
            EndpointConfiguration.UseSerialization <NewtonsoftSerializer>();
        }
コード例 #4
0
        public async Task NowItGetsALittleBitCrazy()
        {
            var actions = new Queue <Func <Context, Func <Task>, Task> >();

            actions.Enqueue(MethodAsyncWithContext1);
            actions.Enqueue(MethodWhichExecutesRestMultipleTimes);
            actions.Enqueue(MethodAsyncWithContext2);
            actions.Enqueue(MethodAsynWithContextc3);

            var context = new Context();

            context.SetLogger(Console.WriteLine);

            var invoker = new PipelineInvoker();

            invoker.Actions(actions);
            context.SetSnapshotter(invoker.TakeSnapshot, invoker.RestoreSnapshot);

            await invoker.Invoke(context);
        }