private static IContainer SetupContainer(IServiceCollection services) { ContainerBuilder builder = new ContainerBuilder(); var cloudStorageAccount = ServiceFabricConfiguration.GetCloudStorageAccount(); var cosmosAccount = ServiceFabricConfiguration.GetCloudCosmosAccount(); builder.Register(c => cloudStorageAccount).Named <CloudStorageAccount>("azure-storage"); builder.Register(c => cosmosAccount).Named <CloudStorageAccount>("cosmos-storage"); builder .RegisterGeneric(typeof(AzureBlobContainer <>)) .WithParameter( new ResolvedParameter( (p, c) => p.Name == "account", (p, c) => c.ResolveNamed <CloudStorageAccount>("azure-storage"))) .As(typeof(IAzureBlobContainer <>)); //builder.RegisterGeneric(typeof(AzureBlobContainer<>)) // .As(typeof(IAzureBlobContainer<>)); builder .RegisterGeneric(typeof(AzureTable <>)) .WithParameter( new ResolvedParameter( (p, c) => p.Name == "account", (p, c) => c.ResolveNamed <CloudStorageAccount>("cosmos-storage"))) .As(typeof(IAzureTable <>)); //builder.RegisterGeneric(typeof(AzureTable<>)) // .As(typeof(IAzureTable<>)); builder.Populate(services); return(builder.Build()); }
private async Task AppendSurveyAnswerIdToSurveyAnswerListAsync(string slugName, string surveyAnswerId) { var SurveyAnswersListContainerName = "surveyanswerslist"; if (string.IsNullOrWhiteSpace(slugName)) { throw new ArgumentException($"{nameof(slugName)} cannot be null, empty, or only whitespace"); } if (string.IsNullOrWhiteSpace(surveyAnswerId)) { throw new ArgumentException($"{nameof(surveyAnswerId)} cannot be null, empty, or only whitespace"); } var answerListContainer = new AzureBlobContainer <List <string> >( ServiceFabricConfiguration.GetCloudStorageAccount(), SurveyAnswersListContainerName); try { await SaveAsync(answerListContainer, slugName, surveyAnswerId); } catch (StorageException ex) { if (ex.Message.Contains("404")) { await answerListContainer.EnsureExistsAsync(); await SaveAsync(answerListContainer, slugName, surveyAnswerId); } else { throw ex; } } }
private static IContainer SetupContainer() { ContainerBuilder builder = new ContainerBuilder(); var cloudStorageAccount = ServiceFabricConfiguration.GetCloudStorageAccount(); builder.RegisterInstance(cloudStorageAccount); builder.RegisterGeneric(typeof(AzureBlobContainer <>)) .As(typeof(IAzureBlobContainer <>)); builder.Register(c => ServiceProxy.Create <ISurveyAnalysisService>(new Uri("fabric:/Tailspin.SurveyAnalysisService.Application/SurveyAnalysisService"))) .As <ISurveyAnalysisService>(); return(builder.Build()); }
private static IContainer SetupContainer() { ContainerBuilder builder = new ContainerBuilder(); var cloudStorageAccount = ServiceFabricConfiguration.GetCloudStorageAccount(); builder.RegisterInstance(cloudStorageAccount); builder.RegisterGeneric(typeof(AzureBlobContainer <>)) .As(typeof(IAzureBlobContainer <>)); builder.RegisterGeneric(typeof(AzureTable <>)) .As(typeof(IAzureTable <>)); return(builder.Build()); }
private static IContainer SetupContainer() { ContainerBuilder builder = new ContainerBuilder(); var cloudStorageAccount = ServiceFabricConfiguration.GetCloudStorageAccount(); builder.RegisterInstance(cloudStorageAccount); builder.RegisterGeneric(typeof(AzureBlobContainer <>)) .As(typeof(IAzureBlobContainer <>)); builder.Register(c => new Tailspin.SurveyAnalysisService.Client.SurveyAnalysisService()) .As <ISurveyAnalysisService>(); return(builder.Build()); }
public AnswerAnalysisService(StatelessServiceContext context) : base(context) { // The number of connections depends on the particular usage in each application ServicePointManager.DefaultConnectionLimit = 12; var account = ServiceFabricConfiguration.GetCloudStorageAccount(); // TODO: Initialize DI container here or somewhere else since for each instance this constructor is invoked var containerBuilder = new ContainerBuilder(); containerBuilder.RegisterModule <ContainerBootstrapperModule>(); containerBuilder.RegisterInstance(account); _container = containerBuilder.Build(); _container.Resolve <ISurveyAnswerStore>().InitializeAsync().Wait(); _container.Resolve <ISurveyAnswersSummaryStore>().InitializeAsync().Wait(); _container.Resolve <ITenantStore>().InitializeAsync().Wait(); _container.Resolve <ISurveyStore>().InitializeAsync().Wait(); _container.Resolve <ISurveyTransferStore>().InitializeAsync().Wait(); }
// This method gets called by the runtime. Use this method to add services to the container. public IServiceProvider ConfigureServices(IServiceCollection services) { // Add framework services. // Persist data protection keys in Redis var redisConnectionString = ServiceFabricConfiguration.GetConfigurationSettingValue("ConnectionStrings", "RedisCacheConnectionString", "YourRedisCacheConnectionString"); services.AddDataProtection() .PersistKeysToRedis(ConnectionMultiplexer.Connect(redisConnectionString), "DataProtection-Keys"); // Add Redis-based distributed cache services.AddSingleton <IDistributedCache>(serviceProvider => new RedisCache(new RedisCacheOptions { Configuration = redisConnectionString })); services.AddSession(); services.AddMvc(); var account = ServiceFabricConfiguration.GetCloudStorageAccount(); // Add Autofac var containerBuilder = new ContainerBuilder(); containerBuilder.RegisterModule <ContainerBootstrapperModule>(); containerBuilder.Populate(services); containerBuilder.RegisterInstance(account); var container = containerBuilder.Build(); container.Resolve <ISurveyStore>().InitializeAsync().Wait(); container.Resolve <ISurveyAnswerStore>().InitializeAsync().Wait(); container.Resolve <ISurveyAnswersSummaryStore>().InitializeAsync().Wait(); container.Resolve <ISurveyTransferStore>().InitializeAsync().Wait(); container.Resolve <ITenantStore>().InitializeAsync().Wait(); return(new AutofacServiceProvider(container)); }
// This method gets called by the runtime. Use this method to add services to the container. public IServiceProvider ConfigureServices(IServiceCollection services) { // Add framework services. // Persist data protection keys in Redis var redisConnectionString = ServiceFabricConfiguration.GetConfigurationSettingValue("ConnectionStrings", "RedisCacheConnectionString", "YourRedisCacheConnectionString"); services.AddDataProtection() .PersistKeysToRedis(ConnectionMultiplexer.Connect(redisConnectionString), "DataProtection-Keys"); services.AddMvc(); var account = ServiceFabricConfiguration.GetCloudStorageAccount(); // Add Autofac var containerBuilder = new ContainerBuilder(); containerBuilder.RegisterModule <ContainerBootstrapperModule>(); containerBuilder.Populate(services); containerBuilder.RegisterInstance(account); var container = containerBuilder.Build(); return(new AutofacServiceProvider(container)); }
protected override async Task RunAsync(CancellationToken cancellationToken) { int batchSize = 100; long delayMs = 20; surveyQueue = await this.StateManager.GetOrAddAsync <IReliableConcurrentQueue <ClientModels.SurveyAnswer> >("surveyQueue"); ISurveyAnalysisService surveyAnalysisService = new Tailspin.SurveyAnalysisService.Client.SurveyAnalysisService(); List <ClientModels.SurveyAnswer> processItems = new List <ClientModels.SurveyAnswer>(); try { while (!cancellationToken.IsCancellationRequested) { cancellationToken.ThrowIfCancellationRequested(); using (var tx = this.StateManager.CreateTransaction()) { ConditionalValue <ClientModels.SurveyAnswer> ret; for (int i = 0; i < batchSize; ++i) { ret = await surveyQueue.TryDequeueAsync(tx, cancellationToken); if (ret.HasValue) { processItems.Add(ret.Value.DeepCopy()); } else { break; } } if (processItems.Count > 0) { foreach (var sa in processItems) { var model = sa.ToSurveyAnswer(); model.CreatedOn = DateTime.UtcNow; var container = new AzureBlobContainer <ApiModels.SurveyAnswer>( ServiceFabricConfiguration.GetCloudStorageAccount(), $"{model.SlugName}-answers"); try { await container.SaveAsync(model.Id, model); } catch (StorageException ex) { if (ex.Message.Contains("404")) { await container.EnsureExistsAsync(); await container.SaveAsync(model.Id, model); } else { throw ex; } } await this.AppendSurveyAnswerIdToSurveyAnswerListAsync(model.SlugName, model.Id); await surveyAnalysisService.MergeSurveyAnswerToAnalysisAsync(model.ToAnalysisServiceSurveyAnswer()); } processItems.Clear(); } await tx.CommitAsync(); } await Task.Delay(TimeSpan.FromMilliseconds(delayMs), cancellationToken); } } catch (Exception ex) { ServiceEventSource.Current.ServiceRequestFailed(ex.ToString()); throw; } }