internal static CosmosClientContext Create( CosmosClient cosmosClient, CosmosClientOptions clientOptions) { if (cosmosClient == null) { throw new ArgumentNullException(nameof(cosmosClient)); } clientOptions = ClientContextCore.CreateOrCloneClientOptions(clientOptions); HttpMessageHandler httpMessageHandler = CosmosHttpClientCore.CreateHttpClientHandler( clientOptions.GatewayModeMaxConnectionLimit, clientOptions.WebProxy); DocumentClient documentClient = new DocumentClient( cosmosClient.Endpoint, cosmosClient.AuthorizationTokenProvider, apitype: clientOptions.ApiType, sendingRequestEventArgs: clientOptions.SendingRequestEventArgs, transportClientHandlerFactory: clientOptions.TransportClientHandlerFactory, connectionPolicy: clientOptions.GetConnectionPolicy(), enableCpuMonitor: clientOptions.EnableCpuMonitor, storeClientFactory: clientOptions.StoreClientFactory, desiredConsistencyLevel: clientOptions.GetDocumentsConsistencyLevel(), handler: httpMessageHandler, sessionContainer: clientOptions.SessionContainer); return(ClientContextCore.Create( cosmosClient, documentClient, clientOptions)); }
/// <summary> /// Used for unit testing only. /// </summary> /// <remarks>This constructor should be removed at some point. The mocking should happen in a derivied class.</remarks> internal CosmosClient( string accountEndpoint, string authKeyOrResourceToken, CosmosClientOptions cosmosClientOptions, DocumentClient documentClient) { if (string.IsNullOrEmpty(accountEndpoint)) { throw new ArgumentNullException(nameof(accountEndpoint)); } if (string.IsNullOrEmpty(authKeyOrResourceToken)) { throw new ArgumentNullException(nameof(authKeyOrResourceToken)); } if (cosmosClientOptions == null) { throw new ArgumentNullException(nameof(cosmosClientOptions)); } if (documentClient == null) { throw new ArgumentNullException(nameof(documentClient)); } this.Endpoint = new Uri(accountEndpoint); this.AccountKey = authKeyOrResourceToken; this.ClientContext = ClientContextCore.Create( this, documentClient, cosmosClientOptions); }
internal static CosmosClientContext Create( CosmosClient cosmosClient, CosmosClientOptions clientOptions) { if (cosmosClient == null) { throw new ArgumentNullException(nameof(cosmosClient)); } clientOptions = ClientContextCore.CreateOrCloneClientOptions(clientOptions); DocumentClient documentClient = new DocumentClient( cosmosClient.Endpoint, cosmosClient.AccountKey, apitype: clientOptions.ApiType, sendingRequestEventArgs: clientOptions.SendingRequestEventArgs, transportClientHandlerFactory: clientOptions.TransportClientHandlerFactory, connectionPolicy: clientOptions.GetConnectionPolicy(), enableCpuMonitor: clientOptions.EnableCpuMonitor, storeClientFactory: clientOptions.StoreClientFactory, desiredConsistencyLevel: clientOptions.GetDocumentsConsistencyLevel(), handler: ClientContextCore.CreateHttpClientHandler(clientOptions), sessionContainer: clientOptions.SessionContainer); return(ClientContextCore.Create( cosmosClient, documentClient, clientOptions)); }
internal static CosmosClientContext Create( CosmosClient cosmosClient, DocumentClient documentClient, CosmosClientOptions clientOptions, RequestInvokerHandler requestInvokerHandler = null) { if (cosmosClient == null) { throw new ArgumentNullException(nameof(cosmosClient)); } if (documentClient == null) { throw new ArgumentNullException(nameof(documentClient)); } clientOptions = ClientContextCore.CreateOrCloneClientOptions(clientOptions); if (requestInvokerHandler == null) { //Request pipeline ClientPipelineBuilder clientPipelineBuilder = new ClientPipelineBuilder( cosmosClient, clientOptions.ConsistencyLevel, clientOptions.CustomHandlers); requestInvokerHandler = clientPipelineBuilder.Build(); } CosmosSerializerCore serializerCore = CosmosSerializerCore.Create( clientOptions.Serializer, clientOptions.SerializerOptions); // This sets the serializer on client options which gives users access to it if a custom one is not configured. clientOptions.SetSerializerIfNotConfigured(serializerCore.GetCustomOrDefaultSerializer()); CosmosResponseFactoryInternal responseFactory = new CosmosResponseFactoryCore(serializerCore); return(new ClientContextCore( client: cosmosClient, clientOptions: clientOptions, serializerCore: serializerCore, cosmosResponseFactory: responseFactory, requestHandler: requestInvokerHandler, documentClient: documentClient, userAgent: documentClient.ConnectionPolicy.UserAgentContainer.UserAgent, batchExecutorCache: new BatchAsyncContainerExecutorCache())); }
internal static CosmosClientContext Create( CosmosClient cosmosClient, DocumentClient documentClient, CosmosClientOptions clientOptions, RequestInvokerHandler requestInvokerHandler = null) { if (cosmosClient == null) { throw new ArgumentNullException(nameof(cosmosClient)); } if (documentClient == null) { throw new ArgumentNullException(nameof(documentClient)); } clientOptions = ClientContextCore.CreateOrCloneClientOptions(clientOptions); if (requestInvokerHandler == null) { //Request pipeline ClientPipelineBuilder clientPipelineBuilder = new ClientPipelineBuilder( cosmosClient, clientOptions.ConsistencyLevel, clientOptions.CustomHandlers); requestInvokerHandler = clientPipelineBuilder.Build(); } CosmosSerializerCore serializerCore = CosmosSerializerCore.Create( clientOptions.Serializer, clientOptions.SerializerOptions); CosmosResponseFactory responseFactory = new CosmosResponseFactory(serializerCore); return(new ClientContextCore( client: cosmosClient, clientOptions: clientOptions, serializerCore: serializerCore, cosmosResponseFactory: responseFactory, requestHandler: requestInvokerHandler, documentClient: documentClient, userAgent: documentClient.ConnectionPolicy.UserAgentContainer.UserAgent, encryptionProcessor: new EncryptionProcessor(), dekCache: new DekCache(), batchExecutorCache: new BatchAsyncContainerExecutorCache())); }
/// <summary> /// Creates a new CosmosClient with the account endpoint URI string and account key. /// /// CosmosClient is thread-safe. Its recommended to maintain a single instance of CosmosClient per lifetime /// of the application which enables efficient connection management and performance. Please refer to the /// <see href="https://docs.microsoft.com/azure/cosmos-db/performance-tips">performance guide</see>. /// </summary> /// <param name="accountEndpoint">The cosmos service endpoint to use</param> /// <param name="authKeyOrResourceToken">The cosmos account key or resource token to use to create the client.</param> /// <param name="clientOptions">(Optional) client options</param> /// <example> /// The CosmosClient is created with the AccountEndpoint, AccountKey or ResourceToken and configured to use "East US 2" region. /// <code language="c#"> /// <![CDATA[ /// using Microsoft.Azure.Cosmos; /// /// CosmosClient cosmosClient = new CosmosClient( /// "account-endpoint-from-portal", /// "account-key-from-portal", /// new CosmosClientOptions() /// { /// ApplicationRegion = Regions.EastUS2, /// }); /// /// // Dispose cosmosClient at application exit /// ]]> /// </code> /// </example> /// <seealso cref="CosmosClientOptions"/> /// <seealso cref="Fluent.CosmosClientBuilder"/> /// <seealso href="https://docs.microsoft.com/azure/cosmos-db/performance-tips">Performance Tips</seealso> /// <seealso href="https://docs.microsoft.com/azure/cosmos-db/troubleshoot-dot-net-sdk">Diagnose and troubleshoot issues</seealso> public CosmosClient( string accountEndpoint, string authKeyOrResourceToken, CosmosClientOptions clientOptions = null) { if (accountEndpoint == null) { throw new ArgumentNullException(nameof(accountEndpoint)); } if (authKeyOrResourceToken == null) { throw new ArgumentNullException(nameof(authKeyOrResourceToken)); } this.Endpoint = new Uri(accountEndpoint); this.AccountKey = authKeyOrResourceToken; this.ClientContext = ClientContextCore.Create( this, clientOptions); }
internal static CosmosClientContext Create( CosmosClient cosmosClient, DocumentClient documentClient, CosmosClientOptions clientOptions, RequestInvokerHandler requestInvokerHandler = null) { if (cosmosClient == null) { throw new ArgumentNullException(nameof(cosmosClient)); } if (documentClient == null) { throw new ArgumentNullException(nameof(documentClient)); } clientOptions = ClientContextCore.CreateOrCloneClientOptions(clientOptions); ConnectionPolicy connectionPolicy = clientOptions.GetConnectionPolicy(cosmosClient.ClientId); ClientTelemetry telemetry = null; if (connectionPolicy.EnableClientTelemetry) { try { telemetry = ClientTelemetry.CreateAndStartBackgroundTelemetry( documentClient: documentClient, userAgent: connectionPolicy.UserAgentContainer.UserAgent, connectionMode: connectionPolicy.ConnectionMode, authorizationTokenProvider: cosmosClient.AuthorizationTokenProvider, diagnosticsHelper: DiagnosticsHandlerHelper.Instance, preferredRegions: clientOptions.ApplicationPreferredRegions); } catch (Exception ex) { DefaultTrace.TraceInformation($"Error While starting Telemetry Job : {ex.Message}. Hence disabling Client Telemetry"); connectionPolicy.EnableClientTelemetry = false; } } else { DefaultTrace.TraceInformation("Client Telemetry Disabled."); } if (requestInvokerHandler == null) { //Request pipeline ClientPipelineBuilder clientPipelineBuilder = new ClientPipelineBuilder( cosmosClient, clientOptions.ConsistencyLevel, clientOptions.CustomHandlers, telemetry: telemetry); requestInvokerHandler = clientPipelineBuilder.Build(); } CosmosSerializerCore serializerCore = CosmosSerializerCore.Create( clientOptions.Serializer, clientOptions.SerializerOptions); // This sets the serializer on client options which gives users access to it if a custom one is not configured. clientOptions.SetSerializerIfNotConfigured(serializerCore.GetCustomOrDefaultSerializer()); CosmosResponseFactoryInternal responseFactory = new CosmosResponseFactoryCore(serializerCore); return(new ClientContextCore( client: cosmosClient, clientOptions: clientOptions, serializerCore: serializerCore, cosmosResponseFactory: responseFactory, requestHandler: requestInvokerHandler, documentClient: documentClient, userAgent: documentClient.ConnectionPolicy.UserAgentContainer.UserAgent, batchExecutorCache: new BatchAsyncContainerExecutorCache(), telemetry: telemetry)); }