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