/// <summary> /// Recreate the Cosmos Client / Container (after a key rotation) /// </summary> /// <param name="cosmosUrl">Cosmos URL</param> /// <param name="cosmosKey">Cosmos Key</param> /// <param name="cosmosDatabase">Cosmos Database</param> /// <param name="cosmosCollection">Cosmos Collection</param> /// <param name="force">force reconnection even if no params changed</param> /// <returns>Task</returns> public async Task Reconnect(Uri cosmosUrl, string cosmosKey, string cosmosDatabase, string cosmosCollection, bool force = false) { if (cosmosUrl == null) { throw new ArgumentNullException(nameof(cosmosUrl)); } if (force || _cosmosDetails.CosmosCollection != cosmosCollection || _cosmosDetails.CosmosDatabase != cosmosDatabase || _cosmosDetails.CosmosKey != cosmosKey || _cosmosDetails.CosmosUrl != cosmosUrl.AbsoluteUri) { CosmosConfig d = new CosmosConfig { CosmosCollection = cosmosCollection, CosmosDatabase = cosmosDatabase, CosmosKey = cosmosKey, CosmosUrl = cosmosUrl.AbsoluteUri }; // open and test a new client / container d.Client = await OpenAndTestCosmosClient(cosmosUrl, cosmosKey, cosmosDatabase, cosmosCollection).ConfigureAwait(false); d.Container = d.Client.GetContainer(cosmosDatabase, cosmosCollection); // set the current CosmosDetail _cosmosDetails = d; } }
/// <summary> /// Extension to allow services.AddDal(url, key, db, coll) /// </summary> /// <param name="services">IServiceCollection</param> /// <param name="cosmosUrl">Cosmos URL</param> /// <param name="cosmosKey">Cosmos Key</param> /// <returns>ServiceCollection</returns> public static IServiceCollection AddCosmosClient(this IServiceCollection services, Uri cosmosUrl, string cosmosKey) { if (cosmosUrl == null) { throw new ApplicationException("cosmosUrl cannot be null"); } CosmosConfig config = new CosmosConfig(); CosmosClientOptions options = new CosmosClientOptions { RequestTimeout = TimeSpan.FromSeconds(config.Timeout), MaxRetryAttemptsOnRateLimitedRequests = config.Retries, MaxRetryWaitTimeOnRateLimitedRequests = TimeSpan.FromSeconds(config.Timeout), }; CosmosClient client = new CosmosClient(cosmosUrl.AbsoluteUri, cosmosKey, options); services.AddSingleton <CosmosClient>(client); return(services); }
/// <summary> /// Data Access Layer Constructor /// </summary> /// <param name="cosmosUrl">CosmosDB Url</param> /// <param name="cosmosKey">CosmosDB connection key</param> /// <param name="cosmosDatabase">CosmosDB Database</param> /// <param name="cosmosCollection">CosmosDB Collection</param> public DAL(Uri cosmosUrl, string cosmosKey, string cosmosDatabase, string cosmosCollection) { if (cosmosUrl == null) { throw new ArgumentNullException(nameof(cosmosUrl)); } _cosmosDetails = new CosmosConfig { MaxRows = MaxPageSize, Retries = CosmosMaxRetries, Timeout = CosmosTimeout, CosmosCollection = cosmosCollection, CosmosDatabase = cosmosDatabase, CosmosKey = cosmosKey, CosmosUrl = cosmosUrl.AbsoluteUri }; // create the CosmosDB client and container _cosmosDetails.Client = OpenAndTestCosmosClient(cosmosUrl, cosmosKey, cosmosDatabase, cosmosCollection).GetAwaiter().GetResult(); _cosmosDetails.Container = _cosmosDetails.Client.GetContainer(cosmosDatabase, cosmosCollection); }